TPTP Problem File: SWW570_5.p

View Solutions - Solve Problem

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

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

% Status   : Theorem
% Rating   : 0.00 v7.4.0, 0.25 v7.3.0, 0.00 v6.4.0
% Syntax   : Number of formulae    :  153 (  46 unt;  50 typ;   0 def)
%            Number of atoms       :  216 (  63 equ)
%            Maximal formula atoms :    7 (   1 avg)
%            Number of connectives :  157 (  44   ~;   1   |;  11   &)
%                                         (  12 <=>;  89  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   19 (   9 avg)
%            Maximal term depth    :   10 (   3 avg)
%            Number of types       :    7 (   6 usr)
%            Number of type conns  :   62 (  29   >;  33   *;   0   +;   0  <<)
%            Number of predicates  :   10 (   9 usr;   0 prp; 1-5 aty)
%            Number of functors    :   35 (  35 usr;  15 con; 0-6 aty)
%            Number of variables   :  651 ( 619   !;   4   ?; 651   :)
%                                         (  28  !>;   0  ?*;   0  @-;   0  @+)
% SPC      : TF1_THM_EQU_NAR

% Comments : This file was generated by Isabelle (most likely Sledgehammer)
%            2011-12-13 16:20:22
%------------------------------------------------------------------------------
%----Should-be-implicit typings (11)
tff(ty_tc_Expr_Obop,type,
    bop: $tType ).

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 (39)
tff(sy_c_Conform_Ohconf,type,
    hconf: 
      !>[M: $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,M)))))))) * fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) ) > $o ) ).

tff(sy_c_Conform_Olconf,type,
    lconf: 
      !>[M: $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,M)))))))) * fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) * fun(list(char),option(val)) * fun(list(char),option(ty)) ) > $o ) ).

tff(sy_c_Expr_Oexp_OBinOp,type,
    binOp: 
      !>[A1: $tType] : ( ( exp(A1) * bop * exp(A1) ) > exp(A1) ) ).

tff(sy_c_Expr_Oexp_OFAss,type,
    fAss: 
      !>[A1: $tType] : ( ( exp(A1) * list(char) * list(char) * exp(A1) ) > 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_Expr_Oexp_Othrow,type,
    throw: 
      !>[A1: $tType] : ( exp(A1) > exp(A1) ) ).

tff(sy_c_JWellForm_Owf__J__mdecl,type,
    wf_J_mdecl: fun(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(list(char),fun(product_prod(list(char),product_prod(list(ty),product_prod(ty,product_prod(list(list(char)),exp(list(char)))))),bool))) ).

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

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,B: $tType] : ( ( A1 * B ) > product_prod(A1,B) ) ).

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

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

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

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_State_Ohp,type,
    hp: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))) > fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) ).

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_TypeRel_Owiden,type,
    widen: 
      !>[M: $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,M)))))))) * ty * ty ) > $o ) ).

tff(sy_c_TypeSafe__Mirabelle__jrcojvmxyu_Osconf,type,
    typeSa976492716_sconf: ( 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(list(char),option(ty)) * product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))) ) > $o ).

tff(sy_c_WellForm_Owf__prog,type,
    wf_prog: 
      !>[M: $tType] : ( ( fun(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,M)))))))),fun(list(char),fun(product_prod(list(char),product_prod(list(ty),product_prod(ty,M))),bool))) * 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,M)))))))) ) > $o ) ).

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,B: $tType] : ( ( fun(product_prod(A1,A1),bool) * fun(product_prod(B,B),bool) ) > fun(product_prod(product_prod(A1,B),product_prod(A1,B)),bool) ) ).

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

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_D____,type,
    d: list(char) ).

tff(sy_v_E____,type,
    e: fun(list(char),option(ty)) ).

tff(sy_v_F____,type,
    f: list(char) ).

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_092_060_094isub_0622____,type,
    e_2: exp(list(char)) ).

tff(sy_v_e_Ha____,type,
    e_a: exp(list(char)) ).

tff(sy_v_ea____,type,
    ea: exp(list(char)) ).

tff(sy_v_h_Ha____,type,
    h_a: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) ).

tff(sy_v_ha____,type,
    ha: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) ).

tff(sy_v_l_Ha____,type,
    l_a: fun(list(char),option(val)) ).

tff(sy_v_la____,type,
    la: fun(list(char),option(val)) ).

%----Relevant facts (100)
tff(fact_0_FAssRed1_I1_J,axiom,
    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(p)) ).

tff(fact_1_assms,axiom,
    wf_prog(product_prod(list(list(char)),exp(list(char))),wf_J_mdecl,p) ).

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

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

tff(fact_4_prod__induct6,axiom,
    ! [F2: $tType,E: $tType,D: $tType,C2: $tType,B: $tType,A1: $tType,X: product_prod(A1,product_prod(B,product_prod(C2,product_prod(D,product_prod(E,F2))))),Pa: fun(product_prod(A1,product_prod(B,product_prod(C2,product_prod(D,product_prod(E,F2))))),bool)] :
      ( ! [A5: A1,B2: B,C3: C2,D1: D,E1: E,F3: F2] : pp(aa(product_prod(A1,product_prod(B,product_prod(C2,product_prod(D,product_prod(E,F2))))),bool,Pa,product_Pair(A1,product_prod(B,product_prod(C2,product_prod(D,product_prod(E,F2)))),A5,product_Pair(B,product_prod(C2,product_prod(D,product_prod(E,F2))),B2,product_Pair(C2,product_prod(D,product_prod(E,F2)),C3,product_Pair(D,product_prod(E,F2),D1,product_Pair(E,F2,E1,F3)))))))
     => pp(aa(product_prod(A1,product_prod(B,product_prod(C2,product_prod(D,product_prod(E,F2))))),bool,Pa,X)) ) ).

tff(fact_5_prod__cases6,axiom,
    ! [A1: $tType,B: $tType,C2: $tType,D: $tType,E: $tType,F2: $tType,Y1: product_prod(A1,product_prod(B,product_prod(C2,product_prod(D,product_prod(E,F2)))))] :
      ~ ! [A5: A1,B2: B,C3: C2,D1: D,E1: E,F3: F2] : Y1 != product_Pair(A1,product_prod(B,product_prod(C2,product_prod(D,product_prod(E,F2)))),A5,product_Pair(B,product_prod(C2,product_prod(D,product_prod(E,F2))),B2,product_Pair(C2,product_prod(D,product_prod(E,F2)),C3,product_Pair(D,product_prod(E,F2),D1,product_Pair(E,F2,E1,F3))))) ).

tff(fact_6_prod__induct5,axiom,
    ! [E: $tType,D: $tType,C2: $tType,B: $tType,A1: $tType,X: product_prod(A1,product_prod(B,product_prod(C2,product_prod(D,E)))),Pa: fun(product_prod(A1,product_prod(B,product_prod(C2,product_prod(D,E)))),bool)] :
      ( ! [A5: A1,B2: B,C3: C2,D1: D,E1: E] : pp(aa(product_prod(A1,product_prod(B,product_prod(C2,product_prod(D,E)))),bool,Pa,product_Pair(A1,product_prod(B,product_prod(C2,product_prod(D,E))),A5,product_Pair(B,product_prod(C2,product_prod(D,E)),B2,product_Pair(C2,product_prod(D,E),C3,product_Pair(D,E,D1,E1))))))
     => pp(aa(product_prod(A1,product_prod(B,product_prod(C2,product_prod(D,E)))),bool,Pa,X)) ) ).

tff(fact_7_prod__cases5,axiom,
    ! [A1: $tType,B: $tType,C2: $tType,D: $tType,E: $tType,Y1: product_prod(A1,product_prod(B,product_prod(C2,product_prod(D,E))))] :
      ~ ! [A5: A1,B2: B,C3: C2,D1: D,E1: E] : Y1 != product_Pair(A1,product_prod(B,product_prod(C2,product_prod(D,E))),A5,product_Pair(B,product_prod(C2,product_prod(D,E)),B2,product_Pair(C2,product_prod(D,E),C3,product_Pair(D,E,D1,E1)))) ).

tff(fact_8_prod__induct4,axiom,
    ! [D: $tType,C2: $tType,B: $tType,A1: $tType,X: product_prod(A1,product_prod(B,product_prod(C2,D))),Pa: fun(product_prod(A1,product_prod(B,product_prod(C2,D))),bool)] :
      ( ! [A5: A1,B2: B,C3: C2,D1: D] : pp(aa(product_prod(A1,product_prod(B,product_prod(C2,D))),bool,Pa,product_Pair(A1,product_prod(B,product_prod(C2,D)),A5,product_Pair(B,product_prod(C2,D),B2,product_Pair(C2,D,C3,D1)))))
     => pp(aa(product_prod(A1,product_prod(B,product_prod(C2,D))),bool,Pa,X)) ) ).

tff(fact_9_prod__cases4,axiom,
    ! [A1: $tType,B: $tType,C2: $tType,D: $tType,Y1: product_prod(A1,product_prod(B,product_prod(C2,D)))] :
      ~ ! [A5: A1,B2: B,C3: C2,D1: D] : Y1 != product_Pair(A1,product_prod(B,product_prod(C2,D)),A5,product_Pair(B,product_prod(C2,D),B2,product_Pair(C2,D,C3,D1))) ).

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

tff(fact_11_FAssRed1_I3_J,axiom,
    typeSa976492716_sconf(p,e,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)) ).

tff(fact_12_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_b: fun(list(char),option(val)),H_b: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),E_b: exp(list(char)),Lb: fun(list(char),option(val)),Hb: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Eb: 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))),Eb,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Hb,Lb)),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_b,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_b,L_b))),red(Pa))
     => hext(Hb,H_b) ) ).

tff(fact_13_Pair__inject,axiom,
    ! [A1: $tType,B: $tType,B5: B,A2: A1,B4: B,A7: A1] :
      ( ( product_Pair(A1,B,A7,B4) = product_Pair(A1,B,A2,B5) )
     => ~ ( ( A7 = A2 )
         => ( B4 != B5 ) ) ) ).

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

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

tff(fact_16_FAssRed1_I2_J,axiom,
    ! [Ta: ty,Ea: fun(list(char),option(ty))] :
      ( typeSa976492716_sconf(p,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))
     => ( wTrt(p,ha,Ea,ea,Ta)
       => ? [T1: ty] :
            ( wTrt(p,h_a,Ea,e_a,T1)
            & widen(product_prod(list(list(char)),exp(list(char))),p,T1,Ta) ) ) ) ).

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

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

tff(fact_19_prod_Orecs,axiom,
    ! [B: $tType,A1: $tType,C2: $tType,B1: C2,A: B,F1: fun(B,fun(C2,A1))] : product_prod_rec(B,C2,A1,F1,product_Pair(B,C2,A,B1)) = aa(C2,A1,aa(B,fun(C2,A1),F1,A),B1) ).

tff(fact_20_FAssRed1_I4_J,axiom,
    wTrt(p,ha,e,fAss(list(char),ea,f,d,e_2),t) ).

tff(fact_21_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_b: fun(list(char),option(val)),H_b: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),E_b: exp(list(char)),Lb: fun(list(char),option(val)),Hb: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Eb: 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))),Eb,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Hb,Lb)),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_b,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_b,L_b))),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))),Eb,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Hb,map_add(list(char),val,L_0,Lb))),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_b,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_b,map_add(list(char),val,L_0,L_b)))),red(Pa)) ) ).

tff(fact_22_pred__equals__eq2,axiom,
    ! [B: $tType,A1: $tType,S3: fun(product_prod(A1,B),bool),R1: fun(product_prod(A1,B),bool)] :
      ( ! [X3: A1,Xa2: B] :
          ( member(product_prod(A1,B),product_Pair(A1,B,X3,Xa2),R1)
        <=> member(product_prod(A1,B),product_Pair(A1,B,X3,Xa2),S3) )
    <=> ( R1 = S3 ) ) ).

tff(fact_23_red__reds_OFAssRed1,axiom,
    ! [E_2: exp(list(char)),Da: list(char),Fa: 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_b: 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))),Eb: 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))),Eb,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_b,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))),fAss(list(char),Eb,Fa,Da,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))),fAss(list(char),E_b,Fa,Da,E_2),S1)),red(Pa)) ) ).

tff(fact_24_hext__trans,axiom,
    ! [H: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),H_b: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Hb: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val)))))] :
      ( hext(Hb,H_b)
     => ( hext(H_b,H)
       => hext(Hb,H) ) ) ).

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

tff(fact_26_exp_Osimps_I8_J,axiom,
    ! [A1: $tType,Exp23: exp(A1),List23: list(char),List13: list(char),Exp13: exp(A1),Exp22: exp(A1),List22: list(char),List12: list(char),Exp12: exp(A1)] :
      ( ( fAss(A1,Exp12,List12,List22,Exp22) = fAss(A1,Exp13,List13,List23,Exp23) )
    <=> ( ( Exp12 = Exp13 )
        & ( List12 = List13 )
        & ( List22 = List23 )
        & ( Exp22 = Exp23 ) ) ) ).

tff(fact_27_widen__refl,axiom,
    ! [M: $tType,T: ty,P2: 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,M))))))))] : widen(M,P2,T,T) ).

tff(fact_28_red__preserves__hconf,axiom,
    ! [Ta: ty,Ea: fun(list(char),option(ty)),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_b: fun(list(char),option(val)),H_b: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),E_b: exp(list(char)),Lb: fun(list(char),option(val)),Hb: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Eb: 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))),Eb,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Hb,Lb)),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_b,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_b,L_b))),red(Pa))
     => ( wTrt(Pa,Hb,Ea,Eb,Ta)
       => ( hconf(product_prod(list(list(char)),exp(list(char))),Pa,Hb)
         => hconf(product_prod(list(list(char)),exp(list(char))),Pa,H_b) ) ) ) ).

tff(fact_29_WTrt__hext__mono,axiom,
    ! [H_b: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Ta: ty,Eb: exp(list(char)),Ea: fun(list(char),option(ty)),Hb: 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,Hb,Ea,Eb,Ta)
     => ( hext(Hb,H_b)
       => wTrt(Pa,H_b,Ea,Eb,Ta) ) ) ).

tff(fact_30_red__preserves__lconf,axiom,
    ! [Ta: ty,Ea: fun(list(char),option(ty)),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_b: fun(list(char),option(val)),H_b: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),E_b: exp(list(char)),Lb: fun(list(char),option(val)),Hb: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Eb: 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))),Eb,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Hb,Lb)),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_b,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_b,L_b))),red(Pa))
     => ( wTrt(Pa,Hb,Ea,Eb,Ta)
       => ( lconf(product_prod(list(list(char)),exp(list(char))),Pa,Hb,Lb,Ea)
         => lconf(product_prod(list(list(char)),exp(list(char))),Pa,H_b,L_b,Ea) ) ) ) ).

tff(fact_31_red__preserves__sconf,axiom,
    ! [Ta: ty,Ea: fun(list(char),option(ty)),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_b: 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))),Eb: 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))),Eb,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_b,S1)),red(Pa))
     => ( wTrt(Pa,hp(S),Ea,Eb,Ta)
       => ( typeSa976492716_sconf(Pa,Ea,S)
         => typeSa976492716_sconf(Pa,Ea,S1) ) ) ) ).

tff(fact_32_widen__trans,axiom,
    ! [A1: $tType,T: ty,U: ty,S2: ty,P2: 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,A1))))))))] :
      ( widen(A1,P2,S2,U)
     => ( widen(A1,P2,U,T)
       => widen(A1,P2,S2,T) ) ) ).

tff(fact_33_lconf__hext,axiom,
    ! [A1: $tType,H_b: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Ea: fun(list(char),option(ty)),Lb: fun(list(char),option(val)),Hb: 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,A1))))))))] :
      ( lconf(A1,Pa,Hb,Lb,Ea)
     => ( hext(Hb,H_b)
       => lconf(A1,Pa,H_b,Lb,Ea) ) ) ).

tff(fact_34_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_b: fun(list(char),option(val)),H_b: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),E_b: exp(list(char)),Lb: fun(list(char),option(val)),Hb: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Eb: 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))),Eb,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Hb,Lb)),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_b,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_b,L_b))),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))),Eb,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),Hb,map_add(list(char),val,L_0,Lb))),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_b,product_Pair(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val)),H_b,map_add(list(char),val,L_0,L_b)))),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_prod_Oexhaust,axiom,
    ! [A1: $tType,B: $tType,Y1: product_prod(A1,B)] :
      ~ ! [A5: A1,B2: B] : Y1 != product_Pair(A1,B,A5,B2) ).

tff(fact_36_PairE,axiom,
    ! [A1: $tType,B: $tType,P1: product_prod(A1,B)] :
      ~ ! [X1: A1,Y: B] : P1 != product_Pair(A1,B,X1,Y) ).

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

tff(fact_38_curry__conv,axiom,
    ! [A1: $tType,B: $tType,C2: $tType,B1: C2,A: B,F: fun(product_prod(B,C2),A1)] : product_curry(B,C2,A1,F,A,B1) = aa(product_prod(B,C2),A1,F,product_Pair(B,C2,A,B1)) ).

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

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

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

tff(fact_42_curry__def,axiom,
    ! [C2: $tType,A1: $tType,B: $tType,X2: fun(product_prod(A1,B),C2),Xa1: A1,Xb1: B] : product_curry(A1,B,C2,X2,Xa1,Xb1) = aa(product_prod(A1,B),C2,X2,product_Pair(A1,B,Xa1,Xb1)) ).

tff(fact_43_FAssReds1,axiom,
    ! [E_2: exp(list(char)),Da: list(char),Fa: 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_b: 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))),Eb: 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))),Eb,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_b,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))),fAss(list(char),Eb,Fa,Da,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))),fAss(list(char),E_b,Fa,Da,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_44_rtrancl_Ortrancl__refl,axiom,
    ! [A1: $tType,R: fun(product_prod(A1,A1),bool),A: A1] : member(product_prod(A1,A1),product_Pair(A1,A1,A,A),transitive_rtrancl(A1,R)) ).

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

tff(fact_46_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_47_rtrancl__trans,axiom,
    ! [A1: $tType,C1: A1,R: fun(product_prod(A1,A1),bool),B1: A1,A: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A,B1),transitive_rtrancl(A1,R))
     => ( member(product_prod(A1,A1),product_Pair(A1,A1,B1,C1),transitive_rtrancl(A1,R))
       => member(product_prod(A1,A1),product_Pair(A1,A1,A,C1),transitive_rtrancl(A1,R)) ) ) ).

tff(fact_48_converse__rtrancl__into__rtrancl,axiom,
    ! [A1: $tType,C1: A1,R: fun(product_prod(A1,A1),bool),B1: A1,A: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A,B1),R)
     => ( member(product_prod(A1,A1),product_Pair(A1,A1,B1,C1),transitive_rtrancl(A1,R))
       => member(product_prod(A1,A1),product_Pair(A1,A1,A,C1),transitive_rtrancl(A1,R)) ) ) ).

tff(fact_49_rtrancl_Ortrancl__into__rtrancl,axiom,
    ! [A1: $tType,C1: A1,R: fun(product_prod(A1,A1),bool),B1: A1,A: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A,B1),transitive_rtrancl(A1,R))
     => ( member(product_prod(A1,A1),product_Pair(A1,A1,B1,C1),R)
       => member(product_prod(A1,A1),product_Pair(A1,A1,A,C1),transitive_rtrancl(A1,R)) ) ) ).

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

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

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

tff(fact_53_rtrancl__induct,axiom,
    ! [A1: $tType,Pa: fun(A1,bool),R: fun(product_prod(A1,A1),bool),B1: A1,A: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A,B1),transitive_rtrancl(A1,R))
     => ( pp(aa(A1,bool,Pa,A))
       => ( ! [Y: A1,Z: A1] :
              ( member(product_prod(A1,A1),product_Pair(A1,A1,A,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,B1)) ) ) ) ).

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

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

tff(fact_56_converse__rtrancl__induct,axiom,
    ! [A1: $tType,Pa: fun(A1,bool),R: fun(product_prod(A1,A1),bool),B1: A1,A: A1] :
      ( member(product_prod(A1,A1),product_Pair(A1,A1,A,B1),transitive_rtrancl(A1,R))
     => ( pp(aa(A1,bool,Pa,B1))
       => ( ! [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,B1),transitive_rtrancl(A1,R))
               => ( pp(aa(A1,bool,Pa,Z))
                 => pp(aa(A1,bool,Pa,Y)) ) ) )
         => pp(aa(A1,bool,Pa,A)) ) ) ) ).

tff(fact_57_FAssReds2,axiom,
    ! [Da: list(char),Fa: list(char),V1: 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))),E_b: 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))),Eb: 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))),Eb,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_b,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))),fAss(list(char),val1(list(char),V1),Fa,Da,Eb),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))),fAss(list(char),val1(list(char),V1),Fa,Da,E_b),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_58_exp_Osimps_I3_J,axiom,
    ! [A1: $tType,Val2: val,Val1: val] :
      ( ( val1(A1,Val1) = val1(A1,Val2) )
    <=> ( Val1 = Val2 ) ) ).

tff(fact_59_exp_Osimps_I78_J,axiom,
    ! [A1: $tType,Exp21: exp(A1),List21: list(char),List11: list(char),Exp11: exp(A1),Val: val] : val1(A1,Val) != fAss(A1,Exp11,List11,List21,Exp21) ).

tff(fact_60_exp_Osimps_I79_J,axiom,
    ! [A1: $tType,Val: val,Exp21: exp(A1),List21: list(char),List11: list(char),Exp11: exp(A1)] : fAss(A1,Exp11,List11,List21,Exp21) != val1(A1,Val) ).

tff(fact_61_red__reds_OFAssRed2,axiom,
    ! [Da: list(char),Fa: list(char),V1: 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))),E_b: 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))),Eb: 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))),Eb,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_b,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))),fAss(list(char),val1(list(char),V1),Fa,Da,Eb),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))),fAss(list(char),val1(list(char),V1),Fa,Da,E_b),S1)),red(Pa)) ) ).

tff(fact_62_FAssRedsThrow2,axiom,
    ! [Da: list(char),Fa: 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))),Eb: exp(list(char)),E_2: 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))),V1: 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))),E_1: 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))),E_1,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),V1),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_2,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))),throw(list(char),Eb),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))),fAss(list(char),E_1,Fa,Da,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))),throw(list(char),Eb),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_63_TryRedsVal,axiom,
    ! [E_2: exp(list(char)),V: 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))),V1: 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))),Eb: 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))),Eb,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),V1),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),Eb,C,V,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),V1),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_64_BinOp2Reds,axiom,
    ! [Bop: bop,V1: 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))),E_b: 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))),Eb: 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))),Eb,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_b,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))),binOp(list(char),val1(list(char),V1),Bop,Eb),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))),binOp(list(char),val1(list(char),V1),Bop,E_b),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_65_exp_Osimps_I14_J,axiom,
    ! [A1: $tType,Exp5: exp(A1),Exp4: exp(A1)] :
      ( ( throw(A1,Exp4) = throw(A1,Exp5) )
    <=> ( Exp4 = Exp5 ) ) ).

tff(fact_66_exp_Osimps_I4_J,axiom,
    ! [A1: $tType,Exp23: exp(A1),Bop3: bop,Exp13: exp(A1),Exp22: exp(A1),Bop: bop,Exp12: exp(A1)] :
      ( ( binOp(A1,Exp12,Bop,Exp22) = binOp(A1,Exp13,Bop3,Exp23) )
    <=> ( ( Exp12 = Exp13 )
        & ( Bop = Bop3 )
        & ( Exp22 = Exp23 ) ) ) ).

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

tff(fact_68_exp_Osimps_I93_J,axiom,
    ! [A1: $tType,Val: val,Exp21: exp(A1),A2: A1,List: list(char),Exp11: exp(A1)] : tryCatch(A1,Exp11,List,A2,Exp21) != val1(A1,Val) ).

tff(fact_69_exp_Osimps_I71_J,axiom,
    ! [A1: $tType,Val: val,Exp21: exp(A1),Bop2: bop,Exp11: exp(A1)] : binOp(A1,Exp11,Bop2,Exp21) != val1(A1,Val) ).

tff(fact_70_exp_Osimps_I92_J,axiom,
    ! [A1: $tType,Exp21: exp(A1),A2: A1,List: list(char),Exp11: exp(A1),Val: val] : val1(A1,Val) != tryCatch(A1,Exp11,List,A2,Exp21) ).

tff(fact_71_exp_Osimps_I70_J,axiom,
    ! [A1: $tType,Exp21: exp(A1),Bop2: bop,Exp11: exp(A1),Val: val] : val1(A1,Val) != binOp(A1,Exp11,Bop2,Exp21) ).

tff(fact_72_exp_Osimps_I91_J,axiom,
    ! [A1: $tType,Val: val,Exp: exp(A1)] : throw(A1,Exp) != val1(A1,Val) ).

tff(fact_73_exp_Osimps_I90_J,axiom,
    ! [A1: $tType,Exp: exp(A1),Val: val] : val1(A1,Val) != throw(A1,Exp) ).

tff(fact_74_exp_Osimps_I113_J,axiom,
    ! [A1: $tType,Exp2: exp(A1),Bop1: bop,Exp1: exp(A1),Exp: exp(A1)] : throw(A1,Exp) != binOp(A1,Exp1,Bop1,Exp2) ).

tff(fact_75_ext,axiom,
    ! [B: $tType,A1: $tType,G: fun(A1,B),F: fun(A1,B)] :
      ( ! [X1: A1] : aa(A1,B,F,X1) = aa(A1,B,G,X1)
     => ( F = G ) ) ).

tff(fact_76_mem__def,axiom,
    ! [A1: $tType,A3: fun(A1,bool),X: A1] :
      ( member(A1,X,A3)
    <=> pp(aa(A1,bool,A3,X)) ) ).

tff(fact_77_exp_Osimps_I224_J,axiom,
    ! [A1: $tType,Exp21: exp(A1),A2: A1,List: list(char),Exp11: exp(A1),Exp3: exp(A1)] : throw(A1,Exp3) != tryCatch(A1,Exp11,List,A2,Exp21) ).

tff(fact_78_exp_Osimps_I112_J,axiom,
    ! [A1: $tType,Exp: exp(A1),Exp2: exp(A1),Bop1: bop,Exp1: exp(A1)] : binOp(A1,Exp1,Bop1,Exp2) != throw(A1,Exp) ).

tff(fact_79_exp_Osimps_I114_J,axiom,
    ! [A1: $tType,Exp21: exp(A1),A2: A1,List: list(char),Exp11: exp(A1),Exp2: exp(A1),Bop1: bop,Exp1: exp(A1)] : binOp(A1,Exp1,Bop1,Exp2) != tryCatch(A1,Exp11,List,A2,Exp21) ).

tff(fact_80_exp_Osimps_I225_J,axiom,
    ! [A1: $tType,Exp3: exp(A1),Exp21: exp(A1),A2: A1,List: list(char),Exp11: exp(A1)] : tryCatch(A1,Exp11,List,A2,Exp21) != throw(A1,Exp3) ).

tff(fact_81_exp_Osimps_I115_J,axiom,
    ! [A1: $tType,Exp2: exp(A1),Bop1: bop,Exp1: exp(A1),Exp21: exp(A1),A2: A1,List: list(char),Exp11: exp(A1)] : tryCatch(A1,Exp11,List,A2,Exp21) != binOp(A1,Exp1,Bop1,Exp2) ).

tff(fact_82_exp_Osimps_I183_J,axiom,
    ! [A1: $tType,Exp2: exp(A1),List2: list(char),List1: list(char),Exp1: exp(A1),Exp21: exp(A1),A2: A1,List: list(char),Exp11: exp(A1)] : tryCatch(A1,Exp11,List,A2,Exp21) != fAss(A1,Exp1,List1,List2,Exp2) ).

tff(fact_83_exp_Osimps_I182_J,axiom,
    ! [A1: $tType,Exp21: exp(A1),A2: A1,List: list(char),Exp11: exp(A1),Exp2: exp(A1),List2: list(char),List1: list(char),Exp1: exp(A1)] : fAss(A1,Exp1,List1,List2,Exp2) != tryCatch(A1,Exp11,List,A2,Exp21) ).

tff(fact_84_exp_Osimps_I101_J,axiom,
    ! [A1: $tType,Exp2: exp(A1),Bop1: bop,Exp1: exp(A1),Exp21: exp(A1),List21: list(char),List11: list(char),Exp11: exp(A1)] : fAss(A1,Exp11,List11,List21,Exp21) != binOp(A1,Exp1,Bop1,Exp2) ).

tff(fact_85_exp_Osimps_I100_J,axiom,
    ! [A1: $tType,Exp21: exp(A1),List21: list(char),List11: list(char),Exp11: exp(A1),Exp2: exp(A1),Bop1: bop,Exp1: exp(A1)] : binOp(A1,Exp1,Bop1,Exp2) != fAss(A1,Exp11,List11,List21,Exp21) ).

tff(fact_86_exp_Osimps_I180_J,axiom,
    ! [A1: $tType,Exp: exp(A1),Exp2: exp(A1),List2: list(char),List1: list(char),Exp1: exp(A1)] : fAss(A1,Exp1,List1,List2,Exp2) != throw(A1,Exp) ).

tff(fact_87_exp_Osimps_I181_J,axiom,
    ! [A1: $tType,Exp2: exp(A1),List2: list(char),List1: list(char),Exp1: exp(A1),Exp: exp(A1)] : throw(A1,Exp) != fAss(A1,Exp1,List1,List2,Exp2) ).

tff(fact_88_red__reds_OBinOpThrow1,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)),Bop: bop,Eb: 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))),binOp(list(char),throw(list(char),Eb),Bop,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))),throw(list(char),Eb),S)),red(Pa)) ).

tff(fact_89_red__reds_OBinOpThrow2,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))),Eb: exp(list(char)),Bop: bop,V_1: 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))),binOp(list(char),val1(list(char),V_1),Bop,throw(list(char),Eb)),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))),throw(list(char),Eb),S)),red(Pa)) ).

tff(fact_90_BinOpRedsThrow1,axiom,
    ! [E_2: exp(list(char)),Bop: bop,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_b: 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))),Eb: 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))),Eb,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))),throw(list(char),E_b),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))),binOp(list(char),Eb,Bop,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))),throw(list(char),E_b),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_91_BinOpRedsThrow2,axiom,
    ! [Bop: bop,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))),Eb: exp(list(char)),E_2: 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_1: 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))),E_1: 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))),E_1,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_1),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_2,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))),throw(list(char),Eb),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))),binOp(list(char),E_1,Bop,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))),throw(list(char),Eb),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_92_red__reds_OThrowThrow,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))),Eb: 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))),throw(list(char),throw(list(char),Eb)),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))),throw(list(char),Eb),S)),red(Pa)) ).

tff(fact_93_red__reds_OThrowRed,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))))))))))),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_b: 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))),Eb: 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))),Eb,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_b,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))),throw(list(char),Eb),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))),throw(list(char),E_b),S1)),red(Pa)) ) ).

tff(fact_94_red__reds_OBinOpRed1,axiom,
    ! [E_2: exp(list(char)),Bop: bop,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_b: 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))),Eb: 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))),Eb,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_b,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))),binOp(list(char),Eb,Bop,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))),binOp(list(char),E_b,Bop,E_2),S1)),red(Pa)) ) ).

tff(fact_95_red__reds_OTryRed,axiom,
    ! [E_2: exp(list(char)),V: 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_b: 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))),Eb: 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))),Eb,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_b,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),Eb,C,V,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_b,C,V,E_2),S1)),red(Pa)) ) ).

tff(fact_96_ThrowReds,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))))))))))),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_b: 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))),Eb: 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))),Eb,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_b,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))),throw(list(char),Eb),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))),throw(list(char),E_b),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_97_ThrowRedsThrow,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))))))))))),S1: product_prod(fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),fun(list(char),option(val))),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))),Eb: 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))),Eb,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))),throw(list(char),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))),throw(list(char),Eb),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))),throw(list(char),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_98_red__reds_OBinOpRed2,axiom,
    ! [Bop: bop,V_1: 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))),E_b: 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))),Eb: 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))),Eb,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_b,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))),binOp(list(char),val1(list(char),V_1),Bop,Eb),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))),binOp(list(char),val1(list(char),V_1),Bop,E_b),S1)),red(Pa)) ) ).

tff(fact_99_red__reds_OFAssThrow1,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)),Da: list(char),Fa: list(char),Eb: 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))),fAss(list(char),throw(list(char),Eb),Fa,Da,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))),throw(list(char),Eb),S)),red(Pa)) ).

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

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

%----Conjectures (1)
tff(conj_0,conjecture,
    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(p)) ).

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