TPTP Problem File: SWW475_5.p

View Solutions - Solve Problem

%------------------------------------------------------------------------------
% File     : SWW475_5 : TPTP v8.2.0. Released v6.0.0.
% Domain   : Software Verification
% Problem  : Java type soundness line 22
% Version  : Especial.
% English  : 

% Refs     : [BN10]  Boehme & Nipkow (2010), Sledgehammer: Judgement Day
%          : [Bla13] Blanchette (2011), Email to Geoff Sutcliffe
% Source   : [Bla13]
% Names    : jinja_22 [Bla13]

% Status   : Unknown
% Rating   : 1.00 v6.4.0
% Syntax   : Number of formulae    :  152 (  53 unt;  44 typ;   0 def)
%            Number of atoms       :  211 (  80 equ)
%            Maximal formula atoms :    7 (   1 avg)
%            Number of connectives :  159 (  56   ~;   2   |;  13   &)
%                                         (  12 <=>;  76  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   19 (   8 avg)
%            Maximal term depth    :   10 (   3 avg)
%            Number of types       :    6 (   5 usr)
%            Number of type conns  :   56 (  28   >;  28   *;   0   +;   0  <<)
%            Number of predicates  :    6 (   5 usr;   0 prp; 1-5 aty)
%            Number of functors    :   34 (  34 usr;  11 con; 0-6 aty)
%            Number of variables   :  678 ( 648   !;   3   ?; 678   :)
%                                         (  27  !>;   0  ?*;   0  @-;   0  @+)
% SPC      : TF1_UNK_EQU_NAR

% Comments : This file was generated by Isabelle (most likely Sledgehammer)
%            2011-12-13 16:15:46
%------------------------------------------------------------------------------
%----Should-be-implicit typings (10)
tff(ty_tc_Expr_Oexp,type,
    exp: $tType > $tType ).

tff(ty_tc_HOL_Obool,type,
    bool: $tType ).

tff(ty_tc_List_Olist,type,
    list: $tType > $tType ).

tff(ty_tc_Nat_Onat,type,
    nat: $tType ).

tff(ty_tc_Option_Ooption,type,
    option: $tType > $tType ).

tff(ty_tc_String_Ochar,type,
    char: $tType ).

tff(ty_tc_Type_Oty,type,
    ty: $tType ).

tff(ty_tc_Value_Oval,type,
    val: $tType ).

tff(ty_tc_fun,type,
    fun: ( $tType * $tType ) > $tType ).

tff(ty_tc_prod,type,
    product_prod: ( $tType * $tType ) > $tType ).

%----Explicit typings (34)
tff(sy_c_Conform_Ohconf,type,
    hconf: 
      !>[M4: $tType] : ( ( list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,M4)))))))) * fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) ) > $o ) ).

tff(sy_c_Expr_Oexp_OCall,type,
    call: 
      !>[A1: $tType] : ( ( exp(A1) * list(char) * list(exp(A1)) ) > exp(A1) ) ).

tff(sy_c_Expr_Oexp_OCast,type,
    cast: 
      !>[A1: $tType] : ( ( list(char) * exp(A1) ) > exp(A1) ) ).

tff(sy_c_Expr_Oexp_OCond,type,
    cond: 
      !>[A1: $tType] : ( ( exp(A1) * exp(A1) * exp(A1) ) > exp(A1) ) ).

tff(sy_c_Expr_Oexp_OFAcc,type,
    fAcc: 
      !>[A1: $tType] : ( ( exp(A1) * list(char) * list(char) ) > exp(A1) ) ).

tff(sy_c_Expr_Oexp_OTryCatch,type,
    tryCatch: 
      !>[A1: $tType] : ( ( exp(A1) * list(char) * A1 * exp(A1) ) > exp(A1) ) ).

tff(sy_c_Expr_Oexp_OVal,type,
    val1: 
      !>[A1: $tType] : ( val > exp(A1) ) ).

tff(sy_c_List_Olist_OCons,type,
    cons: 
      !>[A1: $tType] : ( ( A1 * list(A1) ) > list(A1) ) ).

tff(sy_c_Map_Omap__add,type,
    map_add: 
      !>[A1: $tType,B1: $tType] : ( ( fun(A1,option(B1)) * fun(A1,option(B1)) ) > fun(A1,option(B1)) ) ).

tff(sy_c_Objects_Ohext,type,
    hext: ( fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) * fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) ) > $o ).

tff(sy_c_Product__Type_OPair,type,
    product_Pair: 
      !>[A1: $tType,B1: $tType] : ( ( A1 * B1 ) > product_prod(A1,B1) ) ).

tff(sy_c_Product__Type_Ocurry,type,
    product_curry: 
      !>[A1: $tType,B1: $tType,C2: $tType] : ( ( fun(product_prod(A1,B1),C2) * A1 * B1 ) > C2 ) ).

tff(sy_c_Product__Type_Ointernal__split,type,
    produc1605651328_split: 
      !>[A1: $tType,B1: $tType,C2: $tType] : ( ( fun(A1,fun(B1,C2)) * product_prod(A1,B1) ) > C2 ) ).

tff(sy_c_Product__Type_Oprod_Oprod__rec,type,
    product_prod_rec: 
      !>[A1: $tType,B1: $tType,T1: $tType] : ( ( fun(A1,fun(B1,T1)) * product_prod(A1,B1) ) > T1 ) ).

tff(sy_c_SmallStep_Ored,type,
    red: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))) > fun(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),bool) ).

tff(sy_c_SmallStep_Oreds,type,
    reds: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))) > fun(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),bool) ).

tff(sy_c_Transitive__Closure_Ortrancl,type,
    transitive_rtrancl: 
      !>[A1: $tType] : ( fun(product_prod(A1,A1),bool) > fun(product_prod(A1,A1),bool) ) ).

tff(sy_c_Value_Oval_OBool,type,
    bool1: bool > val ).

tff(sy_c_WellTypeRT_OWTrt,type,
    wTrt: ( list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))) * fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) * fun(list(char),option(ty)) * exp(list(char)) * ty ) > $o ).

tff(sy_c_Wellfounded_Olex__prod,type,
    lex_prod: 
      !>[A1: $tType,B1: $tType] : ( ( fun(product_prod(A1,A1),bool) * fun(product_prod(B1,B1),bool) ) > fun(product_prod(product_prod(A1,B1),product_prod(A1,B1)),bool) ) ).

tff(sy_c_aa,type,
    aa: 
      !>[A1: $tType,B1: $tType] : ( ( fun(A1,B1) * A1 ) > B1 ) ).

tff(sy_c_fFalse,type,
    fFalse: bool ).

tff(sy_c_fTrue,type,
    fTrue: bool ).

tff(sy_c_member,type,
    member: 
      !>[A1: $tType] : ( ( A1 * fun(A1,bool) ) > $o ) ).

tff(sy_c_pp,type,
    pp: bool > $o ).

tff(sy_v_E,type,
    e1: fun(list(char),option(ty)) ).

tff(sy_v_P,type,
    p: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))) ).

tff(sy_v_T,type,
    t: ty ).

tff(sy_v_e,type,
    e: exp(list(char)) ).

tff(sy_v_e_H,type,
    e2: exp(list(char)) ).

tff(sy_v_h,type,
    h1: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) ).

tff(sy_v_h_H,type,
    h: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) ).

tff(sy_v_l,type,
    l1: fun(list(char),option(val)) ).

tff(sy_v_l_H,type,
    l: fun(list(char),option(val)) ).

%----Relevant facts (100)
tff(fact_0_split__paired__All,axiom,
    ! [A1: $tType,B1: $tType,Pa: fun(product_prod(A1,B1),bool)] :
      ( ! [X11: product_prod(A1,B1)] : pp(aa(product_prod(A1,B1),bool,Pa,X11))
    <=> ! [A6: A1,B3: B1] : pp(aa(product_prod(A1,B1),bool,Pa,product_Pair(A1,B1,A6,B3))) ) ).

tff(fact_1_Pair__eq,axiom,
    ! [A1: $tType,B1: $tType,B6: B1,A4: A1,B: B1,A3: A1] :
      ( ( product_Pair(A1,B1,A3,B) = product_Pair(A1,B1,A4,B6) )
    <=> ( ( A3 = A4 )
        & ( B = B6 ) ) ) ).

tff(fact_2_prod__induct6,axiom,
    ! [F2: $tType,E1: $tType,D1: $tType,C2: $tType,B1: $tType,A1: $tType,X1: product_prod(A1,product_prod(B1,product_prod(C2,product_prod(D1,product_prod(E1,F2))))),Pa: fun(product_prod(A1,product_prod(B1,product_prod(C2,product_prod(D1,product_prod(E1,F2))))),bool)] :
      ( ! [A5: A1,B2: B1,C3: C2,D2: D1,E2: E1,F3: F2] : pp(aa(product_prod(A1,product_prod(B1,product_prod(C2,product_prod(D1,product_prod(E1,F2))))),bool,Pa,product_Pair(A1,product_prod(B1,product_prod(C2,product_prod(D1,product_prod(E1,F2)))),A5,product_Pair(B1,product_prod(C2,product_prod(D1,product_prod(E1,F2))),B2,product_Pair(C2,product_prod(D1,product_prod(E1,F2)),C3,product_Pair(D1,product_prod(E1,F2),D2,product_Pair(E1,F2,E2,F3)))))))
     => pp(aa(product_prod(A1,product_prod(B1,product_prod(C2,product_prod(D1,product_prod(E1,F2))))),bool,Pa,X1)) ) ).

tff(fact_3_prod__cases6,axiom,
    ! [A1: $tType,B1: $tType,C2: $tType,D1: $tType,E1: $tType,F2: $tType,Y1: product_prod(A1,product_prod(B1,product_prod(C2,product_prod(D1,product_prod(E1,F2)))))] :
      ~ ! [A5: A1,B2: B1,C3: C2,D2: D1,E2: E1,F3: F2] : Y1 != product_Pair(A1,product_prod(B1,product_prod(C2,product_prod(D1,product_prod(E1,F2)))),A5,product_Pair(B1,product_prod(C2,product_prod(D1,product_prod(E1,F2))),B2,product_Pair(C2,product_prod(D1,product_prod(E1,F2)),C3,product_Pair(D1,product_prod(E1,F2),D2,product_Pair(E1,F2,E2,F3))))) ).

tff(fact_4_prod__induct5,axiom,
    ! [E1: $tType,D1: $tType,C2: $tType,B1: $tType,A1: $tType,X1: product_prod(A1,product_prod(B1,product_prod(C2,product_prod(D1,E1)))),Pa: fun(product_prod(A1,product_prod(B1,product_prod(C2,product_prod(D1,E1)))),bool)] :
      ( ! [A5: A1,B2: B1,C3: C2,D2: D1,E2: E1] : pp(aa(product_prod(A1,product_prod(B1,product_prod(C2,product_prod(D1,E1)))),bool,Pa,product_Pair(A1,product_prod(B1,product_prod(C2,product_prod(D1,E1))),A5,product_Pair(B1,product_prod(C2,product_prod(D1,E1)),B2,product_Pair(C2,product_prod(D1,E1),C3,product_Pair(D1,E1,D2,E2))))))
     => pp(aa(product_prod(A1,product_prod(B1,product_prod(C2,product_prod(D1,E1)))),bool,Pa,X1)) ) ).

tff(fact_5_prod__cases5,axiom,
    ! [A1: $tType,B1: $tType,C2: $tType,D1: $tType,E1: $tType,Y1: product_prod(A1,product_prod(B1,product_prod(C2,product_prod(D1,E1))))] :
      ~ ! [A5: A1,B2: B1,C3: C2,D2: D1,E2: E1] : Y1 != product_Pair(A1,product_prod(B1,product_prod(C2,product_prod(D1,E1))),A5,product_Pair(B1,product_prod(C2,product_prod(D1,E1)),B2,product_Pair(C2,product_prod(D1,E1),C3,product_Pair(D1,E1,D2,E2)))) ).

tff(fact_6_prod__induct4,axiom,
    ! [D1: $tType,C2: $tType,B1: $tType,A1: $tType,X1: product_prod(A1,product_prod(B1,product_prod(C2,D1))),Pa: fun(product_prod(A1,product_prod(B1,product_prod(C2,D1))),bool)] :
      ( ! [A5: A1,B2: B1,C3: C2,D2: D1] : pp(aa(product_prod(A1,product_prod(B1,product_prod(C2,D1))),bool,Pa,product_Pair(A1,product_prod(B1,product_prod(C2,D1)),A5,product_Pair(B1,product_prod(C2,D1),B2,product_Pair(C2,D1,C3,D2)))))
     => pp(aa(product_prod(A1,product_prod(B1,product_prod(C2,D1))),bool,Pa,X1)) ) ).

tff(fact_7_prod__cases4,axiom,
    ! [A1: $tType,B1: $tType,C2: $tType,D1: $tType,Y1: product_prod(A1,product_prod(B1,product_prod(C2,D1)))] :
      ~ ! [A5: A1,B2: B1,C3: C2,D2: D1] : Y1 != product_Pair(A1,product_prod(B1,product_prod(C2,D1)),A5,product_Pair(B1,product_prod(C2,D1),B2,product_Pair(C2,D1,C3,D2))) ).

tff(fact_8_in__lex__prod,axiom,
    ! [A1: $tType,B1: $tType,S: fun(product_prod(B1,B1),bool),R: fun(product_prod(A1,A1),bool),B6: B1,A4: A1,B: B1,A3: A1] :
      ( member(product_prod(product_prod(A1,B1),product_prod(A1,B1)),product_Pair(product_prod(A1,B1),product_prod(A1,B1),product_Pair(A1,B1,A3,B),product_Pair(A1,B1,A4,B6)),lex_prod(A1,B1,R,S))
    <=> ( member(product_prod(A1,A1),product_Pair(A1,A1,A3,A4),R)
        | ( ( A3 = A4 )
          & member(product_prod(B1,B1),product_Pair(B1,B1,B,B6),S) ) ) ) ).

tff(fact_9_red__hext__incr,axiom,
    ! [Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),L_a: fun(list(char),option(val)),H_a: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),E_a: exp(list(char)),La: fun(list(char),option(val)),Ha: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Ha,La)),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_a,L_a))),red(Pa))
     => hext(Ha,H_a) ) ).

tff(fact_10_prod__induct3,axiom,
    ! [C2: $tType,B1: $tType,A1: $tType,X1: product_prod(A1,product_prod(B1,C2)),Pa: fun(product_prod(A1,product_prod(B1,C2)),bool)] :
      ( ! [A5: A1,B2: B1,C3: C2] : pp(aa(product_prod(A1,product_prod(B1,C2)),bool,Pa,product_Pair(A1,product_prod(B1,C2),A5,product_Pair(B1,C2,B2,C3))))
     => pp(aa(product_prod(A1,product_prod(B1,C2)),bool,Pa,X1)) ) ).

tff(fact_11_prod__cases3,axiom,
    ! [A1: $tType,B1: $tType,C2: $tType,Y1: product_prod(A1,product_prod(B1,C2))] :
      ~ ! [A5: A1,B2: B1,C3: C2] : Y1 != product_Pair(A1,product_prod(B1,C2),A5,product_Pair(B1,C2,B2,C3)) ).

tff(fact_12_Pair__inject,axiom,
    ! [A1: $tType,B1: $tType,B5: B1,A: A1,B4: B1,A7: A1] :
      ( ( product_Pair(A1,B1,A7,B4) = product_Pair(A1,B1,A,B5) )
     => ~ ( ( A7 = A )
         => ( B4 != B5 ) ) ) ).

tff(fact_13_split__paired__Ex,axiom,
    ! [A1: $tType,B1: $tType,Pa: fun(product_prod(A1,B1),bool)] :
      ( ? [X11: product_prod(A1,B1)] : pp(aa(product_prod(A1,B1),bool,Pa,X11))
    <=> ? [A6: A1,B3: B1] : pp(aa(product_prod(A1,B1),bool,Pa,product_Pair(A1,B1,A6,B3))) ) ).

tff(fact_14_hext__refl,axiom,
    ! [Ha: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val)))))] : hext(Ha,Ha) ).

tff(fact_15_WTrt__hext__mono,axiom,
    ! [H_a: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),T: ty,Ea: exp(list(char)),E: fun(list(char),option(ty)),Ha: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char)))))))))))] :
      ( wTrt(Pa,Ha,E,Ea,T)
     => ( hext(Ha,H_a)
       => wTrt(Pa,H_a,E,Ea,T) ) ) ).

tff(fact_16_prod_Orecs,axiom,
    ! [B1: $tType,A1: $tType,C2: $tType,B: C2,A3: B1,F11: fun(B1,fun(C2,A1))] : product_prod_rec(B1,C2,A1,F11,product_Pair(B1,C2,A3,B)) = aa(C2,A1,aa(B1,fun(C2,A1),F11,A3),B) ).

tff(fact_17_red__lcl__add,axiom,
    ! [L_0: fun(list(char),option(val)),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),L_a: fun(list(char),option(val)),H_a: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),E_a: exp(list(char)),La: fun(list(char),option(val)),Ha: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Ha,La)),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_a,L_a))),red(Pa))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Ha,map_add(list(char),val,L_0,La))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_a,map_add(list(char),val,L_0,L_a)))),red(Pa)) ) ).

tff(fact_18_prod_Oexhaust,axiom,
    ! [A1: $tType,B1: $tType,Y1: product_prod(A1,B1)] :
      ~ ! [A5: A1,B2: B1] : Y1 != product_Pair(A1,B1,A5,B2) ).

tff(fact_19_PairE,axiom,
    ! [A1: $tType,B1: $tType,P2: product_prod(A1,B1)] :
      ~ ! [X2: A1,Y: B1] : P2 != product_Pair(A1,B1,X2,Y) ).

tff(fact_20_internal__split__conv,axiom,
    ! [B1: $tType,A1: $tType,C2: $tType,B: C2,A3: B1,C1: fun(B1,fun(C2,A1))] : produc1605651328_split(B1,C2,A1,C1,product_Pair(B1,C2,A3,B)) = aa(C2,A1,aa(B1,fun(C2,A1),C1,A3),B) ).

tff(fact_21_curry__conv,axiom,
    ! [A1: $tType,B1: $tType,C2: $tType,B: C2,A3: B1,F1: fun(product_prod(B1,C2),A1)] : product_curry(B1,C2,A1,F1,A3,B) = aa(product_prod(B1,C2),A1,F1,product_Pair(B1,C2,A3,B)) ).

tff(fact_22_curryI,axiom,
    ! [A1: $tType,B1: $tType,B: B1,A3: A1,F1: fun(product_prod(A1,B1),bool)] :
      ( pp(aa(product_prod(A1,B1),bool,F1,product_Pair(A1,B1,A3,B)))
     => pp(product_curry(A1,B1,bool,F1,A3,B)) ) ).

tff(fact_23_curryD,axiom,
    ! [A1: $tType,B1: $tType,B: B1,A3: A1,F1: fun(product_prod(A1,B1),bool)] :
      ( pp(product_curry(A1,B1,bool,F1,A3,B))
     => pp(aa(product_prod(A1,B1),bool,F1,product_Pair(A1,B1,A3,B))) ) ).

tff(fact_24_curryE,axiom,
    ! [A1: $tType,B1: $tType,B: B1,A3: A1,F1: fun(product_prod(A1,B1),bool)] :
      ( pp(product_curry(A1,B1,bool,F1,A3,B))
     => pp(aa(product_prod(A1,B1),bool,F1,product_Pair(A1,B1,A3,B))) ) ).

tff(fact_25_hext__trans,axiom,
    ! [H: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),H_a: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Ha: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val)))))] :
      ( hext(Ha,H_a)
     => ( hext(H_a,H)
       => hext(Ha,H) ) ) ).

tff(fact_26_map__add__assoc,axiom,
    ! [B1: $tType,A1: $tType,M3: fun(A1,option(B1)),M2: fun(A1,option(B1)),M1: fun(A1,option(B1))] : map_add(A1,B1,M1,map_add(A1,B1,M2,M3)) = map_add(A1,B1,map_add(A1,B1,M1,M2),M3) ).

tff(fact_27_Red__lcl__add,axiom,
    ! [L_0: fun(list(char),option(val)),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),L_a: fun(list(char),option(val)),H_a: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),E_a: exp(list(char)),La: fun(list(char),option(val)),Ha: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Ha,La)),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_a,L_a))),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa)))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Ha,map_add(list(char),val,L_0,La))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_a,map_add(list(char),val,L_0,L_a)))),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa))) ) ).

tff(fact_28_reds__hext__incr,axiom,
    ! [Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),L_a: fun(list(char),option(val)),H_a: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Es_a: list(exp(list(char))),La: fun(list(char),option(val)),Ha: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Esa: list(exp(list(char)))] :
      ( member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Esa,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Ha,La)),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_a,L_a))),reds(Pa))
     => hext(Ha,H_a) ) ).

tff(fact_29_red__reds_OTryRed,axiom,
    ! [E_2: exp(list(char)),V1: list(char),C: list(char),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S1)),red(Pa))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),tryCatch(list(char),Ea,C,V1,E_2),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),tryCatch(list(char),E_a,C,V1,E_2),S1)),red(Pa)) ) ).

tff(fact_30_red__reds_OFAccRed,axiom,
    ! [D: list(char),F: list(char),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S1)),red(Pa))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),fAcc(list(char),Ea,F,D),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),fAcc(list(char),E_a,F,D),S1)),red(Pa)) ) ).

tff(fact_31_red__reds_OCastRed,axiom,
    ! [C: list(char),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S1)),red(Pa))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cast(list(char),C,Ea),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cast(list(char),C,E_a),S1)),red(Pa)) ) ).

tff(fact_32_red__reds_OCondRed,axiom,
    ! [E_2: exp(list(char)),E_1: exp(list(char)),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S1)),red(Pa))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cond(list(char),Ea,E_1,E_2),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cond(list(char),E_a,E_1,E_2),S1)),red(Pa)) ) ).

tff(fact_33_TryReds,axiom,
    ! [E_2: exp(list(char)),V1: list(char),C: list(char),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa)))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),tryCatch(list(char),Ea,C,V1,E_2),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),tryCatch(list(char),E_a,C,V1,E_2),S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa))) ) ).

tff(fact_34_FAccReds,axiom,
    ! [D: list(char),F: list(char),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa)))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),fAcc(list(char),Ea,F,D),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),fAcc(list(char),E_a,F,D),S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa))) ) ).

tff(fact_35_CondReds,axiom,
    ! [E_2: exp(list(char)),E_1: exp(list(char)),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa)))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cond(list(char),Ea,E_1,E_2),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cond(list(char),E_a,E_1,E_2),S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa))) ) ).

tff(fact_36_CastReds,axiom,
    ! [C: list(char),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa)))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cast(list(char),C,Ea),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cast(list(char),C,E_a),S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa))) ) ).

tff(fact_37_rtrancl_Ortrancl__refl,axiom,
    ! [A1: $tType,R: fun(product_prod(A1,A1),bool),A3: A1] : member(product_prod(A1,A1),product_Pair(A1,A1,A3,A3),transitive_rtrancl(A1,R)) ).

tff(fact_38_exp_Osimps_I15_J,axiom,
    ! [A1: $tType,Exp23: exp(A1),A4: A1,List5: list(char),Exp13: exp(A1),Exp22: exp(A1),A3: A1,List4: list(char),Exp12: exp(A1)] :
      ( ( tryCatch(A1,Exp12,List4,A3,Exp22) = tryCatch(A1,Exp13,List5,A4,Exp23) )
    <=> ( ( Exp12 = Exp13 )
        & ( List4 = List5 )
        & ( A3 = A4 )
        & ( Exp22 = Exp23 ) ) ) ).

tff(fact_39_r__into__rtrancl,axiom,
    ! [A1: $tType,R: fun(product_prod(A1,A1),bool),P1: product_prod(A1,A1)] :
      ( member(product_prod(A1,A1),P1,R)
     => member(product_prod(A1,A1),P1,transitive_rtrancl(A1,R)) ) ).

tff(fact_40_rtrancl__idemp,axiom,
    ! [A1: $tType,R: fun(product_prod(A1,A1),bool)] : transitive_rtrancl(A1,transitive_rtrancl(A1,R)) = transitive_rtrancl(A1,R) ).

tff(fact_41_exp_Osimps_I12_J,axiom,
    ! [A1: $tType,Exp34: exp(A1),Exp23: exp(A1),Exp13: exp(A1),Exp33: exp(A1),Exp22: exp(A1),Exp12: exp(A1)] :
      ( ( cond(A1,Exp12,Exp22,Exp33) = cond(A1,Exp13,Exp23,Exp34) )
    <=> ( ( Exp12 = Exp13 )
        & ( Exp22 = Exp23 )
        & ( Exp33 = Exp34 ) ) ) ).

tff(fact_42_exp_Osimps_I2_J,axiom,
    ! [A1: $tType,Exp5: exp(A1),List5: list(char),Exp4: exp(A1),List4: list(char)] :
      ( ( cast(A1,List4,Exp4) = cast(A1,List5,Exp5) )
    <=> ( ( List4 = List5 )
        & ( Exp4 = Exp5 ) ) ) ).

tff(fact_43_exp_Osimps_I7_J,axiom,
    ! [A1: $tType,List23: list(char),List13: list(char),Exp5: exp(A1),List22: list(char),List12: list(char),Exp4: exp(A1)] :
      ( ( fAcc(A1,Exp4,List12,List22) = fAcc(A1,Exp5,List13,List23) )
    <=> ( ( Exp4 = Exp5 )
        & ( List12 = List13 )
        & ( List22 = List23 ) ) ) ).

tff(fact_44_rtrancl__trans,axiom,
    ! [A1: $tType,C1: A1,R: fun(product_prod(A1,A1),bool),B: A1,A3: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A3,B),transitive_rtrancl(A1,R))
     => ( member(product_prod(A1,A1),product_Pair(A1,A1,B,C1),transitive_rtrancl(A1,R))
       => member(product_prod(A1,A1),product_Pair(A1,A1,A3,C1),transitive_rtrancl(A1,R)) ) ) ).

tff(fact_45_rtrancl_Ortrancl__into__rtrancl,axiom,
    ! [A1: $tType,C1: A1,R: fun(product_prod(A1,A1),bool),B: A1,A3: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A3,B),transitive_rtrancl(A1,R))
     => ( member(product_prod(A1,A1),product_Pair(A1,A1,B,C1),R)
       => member(product_prod(A1,A1),product_Pair(A1,A1,A3,C1),transitive_rtrancl(A1,R)) ) ) ).

tff(fact_46_converse__rtrancl__into__rtrancl,axiom,
    ! [A1: $tType,C1: A1,R: fun(product_prod(A1,A1),bool),B: A1,A3: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A3,B),R)
     => ( member(product_prod(A1,A1),product_Pair(A1,A1,B,C1),transitive_rtrancl(A1,R))
       => member(product_prod(A1,A1),product_Pair(A1,A1,A3,C1),transitive_rtrancl(A1,R)) ) ) ).

tff(fact_47_exp_Osimps_I63_J,axiom,
    ! [A1: $tType,Exp: exp(A1),List3: list(char),Exp31: exp(A1),Exp2: exp(A1),Exp1: exp(A1)] : cond(A1,Exp1,Exp2,Exp31) != cast(A1,List3,Exp) ).

tff(fact_48_exp_Osimps_I62_J,axiom,
    ! [A1: $tType,Exp31: exp(A1),Exp2: exp(A1),Exp1: exp(A1),Exp: exp(A1),List3: list(char)] : cast(A1,List3,Exp) != cond(A1,Exp1,Exp2,Exp31) ).

tff(fact_49_exp_Osimps_I162_J,axiom,
    ! [A1: $tType,Exp31: exp(A1),Exp2: exp(A1),Exp1: exp(A1),List2: list(char),List1: list(char),Exp: exp(A1)] : fAcc(A1,Exp,List1,List2) != cond(A1,Exp1,Exp2,Exp31) ).

tff(fact_50_exp_Osimps_I163_J,axiom,
    ! [A1: $tType,List2: list(char),List1: list(char),Exp: exp(A1),Exp31: exp(A1),Exp2: exp(A1),Exp1: exp(A1)] : cond(A1,Exp1,Exp2,Exp31) != fAcc(A1,Exp,List1,List2) ).

tff(fact_51_exp_Osimps_I53_J,axiom,
    ! [A1: $tType,Exp: exp(A1),List3: list(char),List21: list(char),List11: list(char),Exp3: exp(A1)] : fAcc(A1,Exp3,List11,List21) != cast(A1,List3,Exp) ).

tff(fact_52_exp_Osimps_I52_J,axiom,
    ! [A1: $tType,List21: list(char),List11: list(char),Exp3: exp(A1),Exp: exp(A1),List3: list(char)] : cast(A1,List3,Exp) != fAcc(A1,Exp3,List11,List21) ).

tff(fact_53_exp_Osimps_I219_J,axiom,
    ! [A1: $tType,Exp32: exp(A1),Exp21: exp(A1),Exp11: exp(A1),Exp2: exp(A1),A: A1,List: list(char),Exp1: exp(A1)] : tryCatch(A1,Exp1,List,A,Exp2) != cond(A1,Exp11,Exp21,Exp32) ).

tff(fact_54_exp_Osimps_I69_J,axiom,
    ! [A1: $tType,Exp: exp(A1),List3: list(char),Exp2: exp(A1),A: A1,List: list(char),Exp1: exp(A1)] : tryCatch(A1,Exp1,List,A,Exp2) != cast(A1,List3,Exp) ).

tff(fact_55_exp_Osimps_I218_J,axiom,
    ! [A1: $tType,Exp2: exp(A1),A: A1,List: list(char),Exp1: exp(A1),Exp32: exp(A1),Exp21: exp(A1),Exp11: exp(A1)] : cond(A1,Exp11,Exp21,Exp32) != tryCatch(A1,Exp1,List,A,Exp2) ).

tff(fact_56_exp_Osimps_I68_J,axiom,
    ! [A1: $tType,Exp2: exp(A1),A: A1,List: list(char),Exp1: exp(A1),Exp: exp(A1),List3: list(char)] : cast(A1,List3,Exp) != tryCatch(A1,Exp1,List,A,Exp2) ).

tff(fact_57_exp_Osimps_I169_J,axiom,
    ! [A1: $tType,List2: list(char),List1: list(char),Exp: exp(A1),Exp2: exp(A1),A: A1,List: list(char),Exp1: exp(A1)] : tryCatch(A1,Exp1,List,A,Exp2) != fAcc(A1,Exp,List1,List2) ).

tff(fact_58_exp_Osimps_I168_J,axiom,
    ! [A1: $tType,Exp2: exp(A1),A: A1,List: list(char),Exp1: exp(A1),List2: list(char),List1: list(char),Exp: exp(A1)] : fAcc(A1,Exp,List1,List2) != tryCatch(A1,Exp1,List,A,Exp2) ).

tff(fact_59_rtrancl__induct2,axiom,
    ! [A1: $tType,B1: $tType,Pa: fun(A1,fun(B1,bool)),R: fun(product_prod(product_prod(A1,B1),product_prod(A1,B1)),bool),By: B1,Bx: A1,Ay: B1,Ax: A1] :
      ( member(product_prod(product_prod(A1,B1),product_prod(A1,B1)),product_Pair(product_prod(A1,B1),product_prod(A1,B1),product_Pair(A1,B1,Ax,Ay),product_Pair(A1,B1,Bx,By)),transitive_rtrancl(product_prod(A1,B1),R))
     => ( pp(aa(B1,bool,aa(A1,fun(B1,bool),Pa,Ax),Ay))
       => ( ! [A5: A1,B2: B1,Aa: A1,Ba: B1] :
              ( member(product_prod(product_prod(A1,B1),product_prod(A1,B1)),product_Pair(product_prod(A1,B1),product_prod(A1,B1),product_Pair(A1,B1,Ax,Ay),product_Pair(A1,B1,A5,B2)),transitive_rtrancl(product_prod(A1,B1),R))
             => ( member(product_prod(product_prod(A1,B1),product_prod(A1,B1)),product_Pair(product_prod(A1,B1),product_prod(A1,B1),product_Pair(A1,B1,A5,B2),product_Pair(A1,B1,Aa,Ba)),R)
               => ( pp(aa(B1,bool,aa(A1,fun(B1,bool),Pa,A5),B2))
                 => pp(aa(B1,bool,aa(A1,fun(B1,bool),Pa,Aa),Ba)) ) ) )
         => pp(aa(B1,bool,aa(A1,fun(B1,bool),Pa,Bx),By)) ) ) ) ).

tff(fact_60_converse__rtrancl__induct2,axiom,
    ! [A1: $tType,B1: $tType,Pa: fun(A1,fun(B1,bool)),R: fun(product_prod(product_prod(A1,B1),product_prod(A1,B1)),bool),By: B1,Bx: A1,Ay: B1,Ax: A1] :
      ( member(product_prod(product_prod(A1,B1),product_prod(A1,B1)),product_Pair(product_prod(A1,B1),product_prod(A1,B1),product_Pair(A1,B1,Ax,Ay),product_Pair(A1,B1,Bx,By)),transitive_rtrancl(product_prod(A1,B1),R))
     => ( pp(aa(B1,bool,aa(A1,fun(B1,bool),Pa,Bx),By))
       => ( ! [A5: A1,B2: B1,Aa: A1,Ba: B1] :
              ( member(product_prod(product_prod(A1,B1),product_prod(A1,B1)),product_Pair(product_prod(A1,B1),product_prod(A1,B1),product_Pair(A1,B1,A5,B2),product_Pair(A1,B1,Aa,Ba)),R)
             => ( member(product_prod(product_prod(A1,B1),product_prod(A1,B1)),product_Pair(product_prod(A1,B1),product_prod(A1,B1),product_Pair(A1,B1,Aa,Ba),product_Pair(A1,B1,Bx,By)),transitive_rtrancl(product_prod(A1,B1),R))
               => ( pp(aa(B1,bool,aa(A1,fun(B1,bool),Pa,Aa),Ba))
                 => pp(aa(B1,bool,aa(A1,fun(B1,bool),Pa,A5),B2)) ) ) )
         => pp(aa(B1,bool,aa(A1,fun(B1,bool),Pa,Ax),Ay)) ) ) ) ).

tff(fact_61_converse__rtranclE2,axiom,
    ! [B1: $tType,A1: $tType,R: fun(product_prod(product_prod(A1,B1),product_prod(A1,B1)),bool),Zb: B1,Za: A1,Xb: B1,Xa: A1] :
      ( member(product_prod(product_prod(A1,B1),product_prod(A1,B1)),product_Pair(product_prod(A1,B1),product_prod(A1,B1),product_Pair(A1,B1,Xa,Xb),product_Pair(A1,B1,Za,Zb)),transitive_rtrancl(product_prod(A1,B1),R))
     => ( ( product_Pair(A1,B1,Xa,Xb) != product_Pair(A1,B1,Za,Zb) )
       => ~ ! [A5: A1,B2: B1] :
              ( member(product_prod(product_prod(A1,B1),product_prod(A1,B1)),product_Pair(product_prod(A1,B1),product_prod(A1,B1),product_Pair(A1,B1,Xa,Xb),product_Pair(A1,B1,A5,B2)),R)
             => ~ member(product_prod(product_prod(A1,B1),product_prod(A1,B1)),product_Pair(product_prod(A1,B1),product_prod(A1,B1),product_Pair(A1,B1,A5,B2),product_Pair(A1,B1,Za,Zb)),transitive_rtrancl(product_prod(A1,B1),R)) ) ) ) ).

tff(fact_62_rtranclE,axiom,
    ! [A1: $tType,R: fun(product_prod(A1,A1),bool),B: A1,A3: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A3,B),transitive_rtrancl(A1,R))
     => ( ( A3 != B )
       => ~ ! [Y: A1] :
              ( member(product_prod(A1,A1),product_Pair(A1,A1,A3,Y),transitive_rtrancl(A1,R))
             => ~ member(product_prod(A1,A1),product_Pair(A1,A1,Y,B),R) ) ) ) ).

tff(fact_63_converse__rtranclE,axiom,
    ! [A1: $tType,R: fun(product_prod(A1,A1),bool),Z1: A1,X1: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,X1,Z1),transitive_rtrancl(A1,R))
     => ( ( X1 != Z1 )
       => ~ ! [Y: A1] :
              ( member(product_prod(A1,A1),product_Pair(A1,A1,X1,Y),R)
             => ~ member(product_prod(A1,A1),product_Pair(A1,A1,Y,Z1),transitive_rtrancl(A1,R)) ) ) ) ).

tff(fact_64_rtrancl__induct,axiom,
    ! [A1: $tType,Pa: fun(A1,bool),R: fun(product_prod(A1,A1),bool),B: A1,A3: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A3,B),transitive_rtrancl(A1,R))
     => ( pp(aa(A1,bool,Pa,A3))
       => ( ! [Y: A1,Z: A1] :
              ( member(product_prod(A1,A1),product_Pair(A1,A1,A3,Y),transitive_rtrancl(A1,R))
             => ( member(product_prod(A1,A1),product_Pair(A1,A1,Y,Z),R)
               => ( pp(aa(A1,bool,Pa,Y))
                 => pp(aa(A1,bool,Pa,Z)) ) ) )
         => pp(aa(A1,bool,Pa,B)) ) ) ) ).

tff(fact_65_converse__rtrancl__induct,axiom,
    ! [A1: $tType,Pa: fun(A1,bool),R: fun(product_prod(A1,A1),bool),B: A1,A3: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A3,B),transitive_rtrancl(A1,R))
     => ( pp(aa(A1,bool,Pa,B))
       => ( ! [Y: A1,Z: A1] :
              ( member(product_prod(A1,A1),product_Pair(A1,A1,Y,Z),R)
             => ( member(product_prod(A1,A1),product_Pair(A1,A1,Z,B),transitive_rtrancl(A1,R))
               => ( pp(aa(A1,bool,Pa,Z))
                 => pp(aa(A1,bool,Pa,Y)) ) ) )
         => pp(aa(A1,bool,Pa,A3)) ) ) ) ).

tff(fact_66_ListReds1,axiom,
    ! [Esa: list(exp(list(char))),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa)))
     => member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cons(exp(list(char)),Ea,Esa),S),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cons(exp(list(char)),E_a,Esa),S1)),transitive_rtrancl(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),reds(Pa))) ) ).

tff(fact_67_red__reds_OListRed1,axiom,
    ! [Esa: list(exp(list(char))),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S1)),red(Pa))
     => member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cons(exp(list(char)),Ea,Esa),S),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cons(exp(list(char)),E_a,Esa),S1)),reds(Pa)) ) ).

tff(fact_68_ListRedsVal,axiom,
    ! [S_2: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a: list(exp(list(char))),Esa: list(exp(list(char))),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S_1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),V: val,S_0: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S_0),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),val1(list(char),V),S_1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa)))
     => ( member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Esa,S_1),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a,S_2)),transitive_rtrancl(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),reds(Pa)))
       => member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cons(exp(list(char)),Ea,Esa),S_0),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cons(exp(list(char)),val1(list(char),V),Es_a),S_2)),transitive_rtrancl(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),reds(Pa))) ) ) ).

tff(fact_69_list_Oinject,axiom,
    ! [A1: $tType,List5: list(A1),A4: A1,List4: list(A1),A3: A1] :
      ( ( cons(A1,A3,List4) = cons(A1,A4,List5) )
    <=> ( ( A3 = A4 )
        & ( List4 = List5 ) ) ) ).

tff(fact_70_ListReds2,axiom,
    ! [V: val,Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a: list(exp(list(char))),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Esa: list(exp(list(char)))] :
      ( member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Esa,S),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a,S1)),transitive_rtrancl(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),reds(Pa)))
     => member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cons(exp(list(char)),val1(list(char),V),Esa),S),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cons(exp(list(char)),val1(list(char),V),Es_a),S1)),transitive_rtrancl(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),reds(Pa))) ) ).

tff(fact_71_exp_Osimps_I3_J,axiom,
    ! [A1: $tType,Val3: val,Val2: val] :
      ( ( val1(A1,Val2) = val1(A1,Val3) )
    <=> ( Val2 = Val3 ) ) ).

tff(fact_72_exp_Osimps_I92_J,axiom,
    ! [A1: $tType,Exp2: exp(A1),A: A1,List: list(char),Exp1: exp(A1),Val: val] : val1(A1,Val) != tryCatch(A1,Exp1,List,A,Exp2) ).

tff(fact_73_exp_Osimps_I93_J,axiom,
    ! [A1: $tType,Val: val,Exp2: exp(A1),A: A1,List: list(char),Exp1: exp(A1)] : tryCatch(A1,Exp1,List,A,Exp2) != val1(A1,Val) ).

tff(fact_74_exp_Osimps_I76_J,axiom,
    ! [A1: $tType,List21: list(char),List11: list(char),Exp3: exp(A1),Val: val] : val1(A1,Val) != fAcc(A1,Exp3,List11,List21) ).

tff(fact_75_mem__def,axiom,
    ! [A1: $tType,A2: fun(A1,bool),X1: A1] :
      ( member(A1,X1,A2)
    <=> pp(aa(A1,bool,A2,X1)) ) ).

tff(fact_76_exp_Osimps_I77_J,axiom,
    ! [A1: $tType,Val: val,List21: list(char),List11: list(char),Exp3: exp(A1)] : fAcc(A1,Exp3,List11,List21) != val1(A1,Val) ).

tff(fact_77_exp_Osimps_I45_J,axiom,
    ! [A1: $tType,Exp: exp(A1),List3: list(char),Val1: val] : val1(A1,Val1) != cast(A1,List3,Exp) ).

tff(fact_78_exp_Osimps_I86_J,axiom,
    ! [A1: $tType,Exp31: exp(A1),Exp2: exp(A1),Exp1: exp(A1),Val: val] : val1(A1,Val) != cond(A1,Exp1,Exp2,Exp31) ).

tff(fact_79_exp_Osimps_I44_J,axiom,
    ! [A1: $tType,Val1: val,Exp: exp(A1),List3: list(char)] : cast(A1,List3,Exp) != val1(A1,Val1) ).

tff(fact_80_exp_Osimps_I87_J,axiom,
    ! [A1: $tType,Val: val,Exp31: exp(A1),Exp2: exp(A1),Exp1: exp(A1)] : cond(A1,Exp1,Exp2,Exp31) != val1(A1,Val) ).

tff(fact_81_not__Cons__self,axiom,
    ! [A1: $tType,X: A1,Xs: list(A1)] : Xs != cons(A1,X,Xs) ).

tff(fact_82_not__Cons__self2,axiom,
    ! [A1: $tType,Xs: list(A1),X: A1] : cons(A1,X,Xs) != Xs ).

tff(fact_83_red__reds_ORedTry,axiom,
    ! [Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_2: exp(list(char)),V1: list(char),C: list(char),V: val] : member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),tryCatch(list(char),val1(list(char),V),C,V1,E_2),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),val1(list(char),V),S)),red(Pa)) ).

tff(fact_84_red__reds_OListRed2,axiom,
    ! [V: val,Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a: list(exp(list(char))),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Esa: list(exp(list(char)))] :
      ( member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Esa,S),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a,S1)),reds(Pa))
     => member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cons(exp(list(char)),val1(list(char),V),Esa),S),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cons(exp(list(char)),val1(list(char),V),Es_a),S1)),reds(Pa)) ) ).

tff(fact_85_TryRedsVal,axiom,
    ! [E_2: exp(list(char)),V1: list(char),C: list(char),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),V: val,S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),val1(list(char),V),S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa)))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),tryCatch(list(char),Ea,C,V1,E_2),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),val1(list(char),V),S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa))) ) ).

tff(fact_86_CallRedsParams,axiom,
    ! [M: list(char),V: val,Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a: list(exp(list(char))),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Esa: list(exp(list(char)))] :
      ( member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Esa,S),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a,S1)),transitive_rtrancl(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),reds(Pa)))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),call(list(char),val1(list(char),V),M,Esa),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),call(list(char),val1(list(char),V),M,Es_a),S1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa))) ) ).

tff(fact_87_red__reds_OCallParams,axiom,
    ! [M: list(char),V: val,Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a: list(exp(list(char))),S: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Esa: list(exp(list(char)))] :
      ( member(product_prod(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Esa,S),product_Pair(list(exp(list(char))),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Es_a,S1)),reds(Pa))
     => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),call(list(char),val1(list(char),V),M,Esa),S),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),call(list(char),val1(list(char),V),M,Es_a),S1)),red(Pa)) ) ).

tff(fact_88_CondReds2T,axiom,
    ! [E_2: exp(list(char)),S_2: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a: exp(list(char)),E_1: exp(list(char)),Pa: list(product_prod(list(char),product_prod(list(char),product_prod(list(product_prod(list(char),ty)),list(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char))))))))))),S_1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),S_0: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea: exp(list(char))] :
      ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),Ea,S_0),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),val1(list(char),bool1(fTrue)),S_1)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa)))
     => ( member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_1,S_1),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S_2)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa)))
       => member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),cond(list(char),Ea,E_1,E_2),S_0),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),E_a,S_2)),transitive_rtrancl(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),red(Pa))) ) ) ).

tff(fact_89_exp_Osimps_I9_J,axiom,
    ! [A1: $tType,List23: list(exp(A1)),List13: list(char),Exp5: exp(A1),List22: list(exp(A1)),List12: list(char),Exp4: exp(A1)] :
      ( ( call(A1,Exp4,List12,List22) = call(A1,Exp5,List13,List23) )
    <=> ( ( Exp4 = Exp5 )
        & ( List12 = List13 )
        & ( List22 = List23 ) ) ) ).

tff(fact_90_exp_Osimps_I81_J,axiom,
    ! [A1: $tType,Val: val,List21: list(exp(A1)),List11: list(char),Exp3: exp(A1)] : call(A1,Exp3,List11,List21) != val1(A1,Val) ).

tff(fact_91_exp_Osimps_I80_J,axiom,
    ! [A1: $tType,List21: list(exp(A1)),List11: list(char),Exp3: exp(A1),Val: val] : val1(A1,Val) != call(A1,Exp3,List11,List21) ).

tff(fact_92_exp_Osimps_I189_J,axiom,
    ! [A1: $tType,List2: list(exp(A1)),List1: list(char),Exp: exp(A1),Exp31: exp(A1),Exp2: exp(A1),Exp1: exp(A1)] : cond(A1,Exp1,Exp2,Exp31) != call(A1,Exp,List1,List2) ).

tff(fact_93_exp_Osimps_I188_J,axiom,
    ! [A1: $tType,Exp31: exp(A1),Exp2: exp(A1),Exp1: exp(A1),List2: list(exp(A1)),List1: list(char),Exp: exp(A1)] : call(A1,Exp,List1,List2) != cond(A1,Exp1,Exp2,Exp31) ).

tff(fact_94_exp_Osimps_I57_J,axiom,
    ! [A1: $tType,Exp: exp(A1),List3: list(char),List21: list(exp(A1)),List11: list(char),Exp3: exp(A1)] : call(A1,Exp3,List11,List21) != cast(A1,List3,Exp) ).

tff(fact_95_exp_Osimps_I56_J,axiom,
    ! [A1: $tType,List21: list(exp(A1)),List11: list(char),Exp3: exp(A1),Exp: exp(A1),List3: list(char)] : cast(A1,List3,Exp) != call(A1,Exp3,List11,List21) ).

tff(fact_96_exp_Osimps_I156_J,axiom,
    ! [A1: $tType,List21: list(exp(A1)),List11: list(char),Exp3: exp(A1),List2: list(char),List1: list(char),Exp: exp(A1)] : fAcc(A1,Exp,List1,List2) != call(A1,Exp3,List11,List21) ).

tff(fact_97_exp_Osimps_I157_J,axiom,
    ! [A1: $tType,List2: list(char),List1: list(char),Exp: exp(A1),List21: list(exp(A1)),List11: list(char),Exp3: exp(A1)] : call(A1,Exp3,List11,List21) != fAcc(A1,Exp,List1,List2) ).

tff(fact_98_exp_Osimps_I195_J,axiom,
    ! [A1: $tType,List2: list(exp(A1)),List1: list(char),Exp: exp(A1),Exp2: exp(A1),A: A1,List: list(char),Exp1: exp(A1)] : tryCatch(A1,Exp1,List,A,Exp2) != call(A1,Exp,List1,List2) ).

tff(fact_99_exp_Osimps_I194_J,axiom,
    ! [A1: $tType,Exp2: exp(A1),A: A1,List: list(char),Exp1: exp(A1),List2: list(exp(A1)),List1: list(char),Exp: exp(A1)] : call(A1,Exp,List1,List2) != tryCatch(A1,Exp1,List,A,Exp2) ).

%----Helper facts (4)
tff(help_pp_1_1_U,axiom,
    ~ pp(fFalse) ).

tff(help_pp_2_1_U,axiom,
    pp(fTrue) ).

tff(help_fTrue_1_1_U,axiom,
    pp(fTrue) ).

tff(help_fTrue_1_1_T,axiom,
    ! [P: bool] :
      ( ( P = fTrue )
      | ( P = fFalse ) ) ).

%----Conjectures (4)
tff(conj_0,hypothesis,
    member(product_prod(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))))),product_Pair(product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_prod(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)))),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),e,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),h1,l1)),product_Pair(exp(list(char)),product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),e2,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),h,l))),red(p)) ).

tff(conj_1,hypothesis,
    wTrt(p,h1,e1,e,t) ).

tff(conj_2,hypothesis,
    hconf(product_prod(list(list(char)),exp(list(char))),p,h1) ).

tff(conj_3,conjecture,
    hconf(product_prod(list(list(char)),exp(list(char))),p,h) ).

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