TPTP Problem File: SWW554_5.p

View Solutions - Solve Problem

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

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

% Status   : Unknown
% Rating   : 1.00 v6.4.0
% Syntax   : Number of formulae    :  173 (  58 unt;  58 typ;   0 def)
%            Number of atoms       :  205 ( 140 equ)
%            Maximal formula atoms :    6 (   1 avg)
%            Number of connectives :  118 (  28   ~;   9   |;  13   &)
%                                         (  19 <=>;  49  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   14 (   6 avg)
%            Maximal term depth    :    9 (   2 avg)
%            Number of types       :    8 (   7 usr)
%            Number of type conns  :   74 (  34   >;  40   *;   0   +;   0  <<)
%            Number of predicates  :   10 (   9 usr;   0 prp; 1-5 aty)
%            Number of functors    :   42 (  42 usr;  10 con; 0-6 aty)
%            Number of variables   :  524 ( 465   !;   8   ?; 524   :)
%                                         (  51  !>;   0  ?*;   0  @-;   0  @+)
% SPC      : TF1_UNK_EQU_NAR

% Comments : This file was generated by Isabelle (most likely Sledgehammer)
%            2011-12-13 16:16:17
%------------------------------------------------------------------------------
%----Should-be-implicit typings (12)
tff(ty_tc_Code__Evaluation_Oterm,type,
    code_term: $tType ).

tff(ty_tc_Code__Numeral_Ocode__numeral,type,
    code_code_numeral: $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 (46)
tff(sy_cl_Orderings_Otop,type,
    top: 
      !>[A: $tType] : $o ).

tff(sy_c_COMBB,type,
    combb: 
      !>[B: $tType,C: $tType,A: $tType] : ( ( fun(B,C) * fun(A,B) ) > fun(A,C) ) ).

tff(sy_c_COMBC,type,
    combc: 
      !>[A: $tType,B: $tType,C: $tType] : ( ( fun(A,fun(B,C)) * B ) > fun(A,C) ) ).

tff(sy_c_COMBK,type,
    combk: 
      !>[A: $tType,B: $tType] : ( A > fun(B,A) ) ).

tff(sy_c_COMBS,type,
    combs: 
      !>[A: $tType,B: $tType,C: $tType] : ( ( fun(A,fun(B,C)) * fun(A,B) ) > fun(A,C) ) ).

tff(sy_c_Conform_Oconf,type,
    conf: 
      !>[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))))) * val * ty ) > $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_Decl_Ois__type,type,
    is_type: 
      !>[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 ) > $o ) ).

tff(sy_c_Expr_Oexp_OLAss,type,
    lAss: 
      !>[A: $tType] : ( ( A * exp(A) ) > exp(A) ) ).

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

tff(sy_c_Fun_Ofun__upd,type,
    fun_upd: 
      !>[A: $tType,B: $tType] : ( ( fun(A,B) * A * B ) > fun(A,B) ) ).

tff(sy_c_Map_Odom,type,
    dom: 
      !>[A: $tType,B: $tType] : ( fun(A,option(B)) > fun(A,bool) ) ).

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

tff(sy_c_Map_Omap__comp,type,
    map_comp: 
      !>[B: $tType,C: $tType,A: $tType] : ( ( fun(B,option(C)) * fun(A,option(B)) * A ) > option(C) ) ).

tff(sy_c_Objects_Otypeof__h,type,
    typeof_h: ( fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))) * val ) > option(ty) ).

tff(sy_c_Option_Obind,type,
    bind: 
      !>[A: $tType,B: $tType] : fun(option(A),fun(fun(A,option(B)),option(B))) ).

tff(sy_c_Option_Ois__none,type,
    is_none: 
      !>[A: $tType] : ( option(A) > $o ) ).

tff(sy_c_Option_Omap,type,
    map: 
      !>[A: $tType,B: $tType] : fun(fun(A,B),fun(option(A),option(B))) ).

tff(sy_c_Option_Ooption_ONone,type,
    none: 
      !>[A: $tType] : option(A) ).

tff(sy_c_Option_Ooption_OSome,type,
    some: 
      !>[A: $tType] : fun(A,option(A)) ).

tff(sy_c_Option_Ooption_Ooption__case,type,
    option_case: 
      !>[T5: $tType,A: $tType] : ( ( T5 * fun(A,T5) ) > fun(option(A),T5) ) ).

tff(sy_c_Option_Ooption_Ooption__rec,type,
    option_rec: 
      !>[T5: $tType,A: $tType] : ( ( T5 * fun(A,T5) * option(A) ) > T5 ) ).

tff(sy_c_Option_Oset,type,
    set: 
      !>[A: $tType] : ( option(A) > fun(A,bool) ) ).

tff(sy_c_Orderings_Otop__class_Otop,type,
    top_top: 
      !>[A: $tType] : A ).

tff(sy_c_Quickcheck__Exhaustive_Ocps__bind,type,
    quickcheck_cps_bind: 
      !>[A: $tType,B: $tType] : ( ( fun(fun(A,option(list(code_term))),option(list(code_term))) * fun(A,fun(fun(B,option(list(code_term))),option(list(code_term)))) * fun(B,option(list(code_term))) ) > option(list(code_term)) ) ).

tff(sy_c_Quickcheck__Exhaustive_Ocps__plus,type,
    quickcheck_cps_plus: 
      !>[A: $tType] : ( ( fun(fun(A,option(list(code_term))),option(list(code_term))) * fun(fun(A,option(list(code_term))),option(list(code_term))) * fun(A,option(list(code_term))) ) > option(list(code_term)) ) ).

tff(sy_c_Quickcheck__Exhaustive_Oorelse,type,
    quickcheck_orelse: 
      !>[A: $tType] : ( ( option(A) * option(A) ) > option(A) ) ).

tff(sy_c_Quickcheck__Exhaustive_Opos__bound__cps__plus,type,
    quickc665717985s_plus: 
      !>[A: $tType] : ( ( fun(fun(A,option(product_prod(bool,list(code_term)))),fun(code_code_numeral,option(product_prod(bool,list(code_term))))) * fun(fun(A,option(product_prod(bool,list(code_term)))),fun(code_code_numeral,option(product_prod(bool,list(code_term))))) * fun(A,option(product_prod(bool,list(code_term)))) * code_code_numeral ) > option(product_prod(bool,list(code_term))) ) ).

tff(sy_c_Quickcheck__Exhaustive_Opos__bound__cps__single,type,
    quickc868703951single: 
      !>[A: $tType] : ( ( A * fun(A,option(product_prod(bool,list(code_term)))) * code_code_numeral ) > option(product_prod(bool,list(code_term))) ) ).

tff(sy_c_Set_OCollect,type,
    collect: 
      !>[A: $tType] : ( fun(A,bool) > fun(A,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_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_aa,type,
    aa: 
      !>[A: $tType,B: $tType] : ( ( fun(A,B) * A ) > B ) ).

tff(sy_c_fFalse,type,
    fFalse: bool ).

tff(sy_c_fNot,type,
    fNot: fun(bool,bool) ).

tff(sy_c_fTrue,type,
    fTrue: bool ).

tff(sy_c_fequal,type,
    fequal: 
      !>[A: $tType] : fun(A,fun(A,bool)) ).

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

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

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

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

tff(sy_v_T____,type,
    t: ty ).

tff(sy_v_V______,type,
    v1: list(char) ).

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_la______,type,
    la: fun(list(char),option(val)) ).

tff(sy_v_v______,type,
    v: val ).

%----Relevant facts (100)
tff(fact_0_RedLAss_I2_J,axiom,
    lconf(product_prod(list(list(char)),exp(list(char))),p,ha,la,e) ).

tff(fact_1_RedLAss_I1_J,axiom,
    wTrt(p,ha,e,lAss(list(char),v1,val1(list(char),v)),t) ).

tff(fact_2_fun__upd__triv,axiom,
    ! [B: $tType,A: $tType,X1: A,F: fun(A,B)] : fun_upd(A,B,F,X1,aa(A,B,F,X1)) = F ).

tff(fact_3_fun__upd__upd,axiom,
    ! [A: $tType,B: $tType,Z1: B,Y1: B,X1: A,F: fun(A,B)] : fun_upd(A,B,fun_upd(A,B,F,X1,Y1),X1,Z1) = fun_upd(A,B,F,X1,Z1) ).

tff(fact_4_fun__upd__apply,axiom,
    ! [B: $tType,A: $tType,Y1: B,F: fun(A,B),X1: A,Z1: A] :
      ( ( ( Z1 = X1 )
       => ( aa(A,B,fun_upd(A,B,F,X1,Y1),Z1) = Y1 ) )
      & ( ( Z1 != X1 )
       => ( aa(A,B,fun_upd(A,B,F,X1,Y1),Z1) = aa(A,B,F,Z1) ) ) ) ).

tff(fact_5_option_Oinject,axiom,
    ! [A: $tType,A5: A,A4: A] :
      ( ( aa(A,option(A),some(A),A4) = aa(A,option(A),some(A),A5) )
    <=> ( A4 = A5 ) ) ).

tff(fact_6_map__upd__Some__unfold,axiom,
    ! [B: $tType,A: $tType,Y1: A,X1: B,B2: A,A4: B,M1: fun(B,option(A))] :
      ( ( aa(B,option(A),fun_upd(B,option(A),M1,A4,aa(A,option(A),some(A),B2)),X1) = aa(A,option(A),some(A),Y1) )
    <=> ( ( ( X1 = A4 )
          & ( B2 = Y1 ) )
        | ( ( X1 != A4 )
          & ( aa(B,option(A),M1,X1) = aa(A,option(A),some(A),Y1) ) ) ) ) ).

tff(fact_7_map__upd__triv,axiom,
    ! [A: $tType,B: $tType,X1: A,K: B,T3: fun(B,option(A))] :
      ( ( aa(B,option(A),T3,K) = aa(A,option(A),some(A),X1) )
     => ( fun_upd(B,option(A),T3,K,aa(A,option(A),some(A),X1)) = T3 ) ) ).

tff(fact_8_map__upd__eqD1,axiom,
    ! [A: $tType,B: $tType,Y1: B,N: fun(A,option(B)),X1: B,A4: A,M1: fun(A,option(B))] :
      ( ( fun_upd(A,option(B),M1,A4,aa(B,option(B),some(B),X1)) = fun_upd(A,option(B),N,A4,aa(B,option(B),some(B),Y1)) )
     => ( X1 = Y1 ) ) ).

tff(fact_9_fun__upd__idem__iff,axiom,
    ! [A: $tType,B: $tType,Y1: B,X1: A,F: fun(A,B)] :
      ( ( fun_upd(A,B,F,X1,Y1) = F )
    <=> ( aa(A,B,F,X1) = Y1 ) ) ).

tff(fact_10_fun__upd__same,axiom,
    ! [B: $tType,A: $tType,Y1: A,X1: B,F: fun(B,A)] : aa(B,A,fun_upd(B,A,F,X1,Y1),X1) = Y1 ).

tff(fact_11_fun__upd__twist,axiom,
    ! [A: $tType,B: $tType,D: B,B2: B,M1: fun(A,B),C1: A,A4: A] :
      ( ( A4 != C1 )
     => ( fun_upd(A,B,fun_upd(A,B,M1,A4,B2),C1,D) = fun_upd(A,B,fun_upd(A,B,M1,C1,D),A4,B2) ) ) ).

tff(fact_12_fun__upd__other,axiom,
    ! [B: $tType,A: $tType,Y1: B,F: fun(A,B),X1: A,Z1: A] :
      ( ( Z1 != X1 )
     => ( aa(A,B,fun_upd(A,B,F,X1,Y1),Z1) = aa(A,B,F,Z1) ) ) ).

tff(fact_13_fun__upd__idem,axiom,
    ! [A: $tType,B: $tType,Y1: A,X1: B,F: fun(B,A)] :
      ( ( aa(B,A,F,X1) = Y1 )
     => ( fun_upd(B,A,F,X1,Y1) = F ) ) ).

tff(fact_14_fun__upd__def,axiom,
    ! [B: $tType,A: $tType,B2: B,F: fun(A,B),A4: A,X2: A] :
      ( ( ( X2 = A4 )
       => ( aa(A,B,fun_upd(A,B,F,A4,B2),X2) = B2 ) )
      & ( ( X2 != A4 )
       => ( aa(A,B,fun_upd(A,B,F,A4,B2),X2) = aa(A,B,F,X2) ) ) ) ).

tff(fact_15_exp_Osimps_I6_J,axiom,
    ! [A: $tType,Exp2: exp(A),A5: A,Exp1: exp(A),A4: A] :
      ( ( lAss(A,A4,Exp1) = lAss(A,A5,Exp2) )
    <=> ( ( A4 = A5 )
        & ( Exp1 = Exp2 ) ) ) ).

tff(fact_16_exp_Osimps_I3_J,axiom,
    ! [A: $tType,Val2: val,Val1: val] :
      ( ( val1(A,Val1) = val1(A,Val2) )
    <=> ( Val1 = Val2 ) ) ).

tff(fact_17_exp_Osimps_I74_J,axiom,
    ! [A: $tType,Exp: exp(A),A3: A,Val: val] : val1(A,Val) != lAss(A,A3,Exp) ).

tff(fact_18_exp_Osimps_I75_J,axiom,
    ! [A: $tType,Val: val,Exp: exp(A),A3: A] : lAss(A,A3,Exp) != val1(A,Val) ).

tff(fact_19_elem__set,axiom,
    ! [A: $tType,Xo: option(A),X1: A] :
      ( member(A,X1,set(A,Xo))
    <=> ( Xo = aa(A,option(A),some(A),X1) ) ) ).

tff(fact_20_option_Orecs_I2_J,axiom,
    ! [A: $tType,B: $tType,A4: B,F2: fun(B,A),F1: A] : option_rec(A,B,F1,F2,aa(B,option(B),some(B),A4)) = aa(B,A,F2,A4) ).

tff(fact_21_is__none__code_I2_J,axiom,
    ! [B: $tType,X: B] : ~ is_none(B,aa(B,option(B),some(B),X)) ).

tff(fact_22_option_Osimps_I5_J,axiom,
    ! [A: $tType,B: $tType,A4: B,F2: fun(B,A),F1: A] : aa(option(B),A,option_case(A,B,F1,F2),aa(B,option(B),some(B),A4)) = aa(B,A,F2,A4) ).

tff(fact_23_bind__lunit,axiom,
    ! [A: $tType,B: $tType,F: fun(B,option(A)),X1: B] : aa(fun(B,option(A)),option(A),aa(option(B),fun(fun(B,option(A)),option(A)),bind(B,A),aa(B,option(B),some(B),X1)),F) = aa(B,option(A),F,X1) ).

tff(fact_24_bind__assoc,axiom,
    ! [C: $tType,A: $tType,B: $tType,G: fun(B,option(A)),F: fun(C,option(B)),X1: option(C)] : aa(fun(B,option(A)),option(A),aa(option(B),fun(fun(B,option(A)),option(A)),bind(B,A),aa(fun(C,option(B)),option(B),aa(option(C),fun(fun(C,option(B)),option(B)),bind(C,B),X1),F)),G) = aa(fun(C,option(A)),option(A),aa(option(C),fun(fun(C,option(A)),option(A)),bind(C,A),X1),combc(C,fun(B,option(A)),option(A),combb(option(B),fun(fun(B,option(A)),option(A)),C,bind(B,A),F),G)) ).

tff(fact_25_bind__runit,axiom,
    ! [A: $tType,X1: option(A)] : aa(fun(A,option(A)),option(A),aa(option(A),fun(fun(A,option(A)),option(A)),bind(A,A),X1),some(A)) = X1 ).

tff(fact_26_ospec,axiom,
    ! [A: $tType,X1: A,Pa: fun(A,bool),A1: option(A)] :
      ( ! [X3: A] :
          ( member(A,X3,set(A,A1))
         => pp(aa(A,bool,Pa,X3)) )
     => ( ( A1 = aa(A,option(A),some(A),X1) )
       => pp(aa(A,bool,Pa,X1)) ) ) ).

tff(fact_27_map__add__upd,axiom,
    ! [A: $tType,B: $tType,Y1: B,X1: A,G: fun(A,option(B)),F: fun(A,option(B))] : map_add(A,B,F,fun_upd(A,option(B),G,X1,aa(B,option(B),some(B),Y1))) = fun_upd(A,option(B),map_add(A,B,F,G),X1,aa(B,option(B),some(B),Y1)) ).

tff(fact_28_lconf__upd,axiom,
    ! [A: $tType,Va1: list(char),Ta: ty,Va: 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,A))))))))] :
      ( lconf(A,Pa,Hb,Lb,Ea)
     => ( conf(A,Pa,Hb,Va,Ta)
       => ( ( aa(list(char),option(ty),Ea,Va1) = aa(ty,option(ty),some(ty),Ta) )
         => lconf(A,Pa,Hb,fun_upd(list(char),option(val),Lb,Va1,aa(val,option(val),some(val),Va)),Ea) ) ) ) ).

tff(fact_29_lconf__upd2,axiom,
    ! [A: $tType,Va1: list(char),Ta: ty,Va: 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,A))))))))] :
      ( lconf(A,Pa,Hb,Lb,Ea)
     => ( conf(A,Pa,Hb,Va,Ta)
       => lconf(A,Pa,Hb,fun_upd(list(char),option(val),Lb,Va1,aa(val,option(val),some(val),Va)),fun_upd(list(char),option(ty),Ea,Va1,aa(ty,option(ty),some(ty),Ta))) ) ) ).

tff(fact_30_,axiom,
    ! [A: $tType,Y1: option(A),X1: option(A)] : quickcheck_orelse(A,X1,Y1) = aa(option(A),option(A),option_case(option(A),A,Y1,some(A)),X1) ).

tff(fact_31_disjE__realizer2,axiom,
    ! [B: $tType,A: $tType,G: fun(A,B),F: B,R1: fun(B,bool),X1: option(A),Q1: fun(A,bool),Pa: bool] :
      ( pp(aa(option(A),bool,option_case(bool,A,Pa,Q1),X1))
     => ( ( pp(Pa)
         => pp(aa(B,bool,R1,F)) )
       => ( ! [Q2: A] :
              ( pp(aa(A,bool,Q1,Q2))
             => pp(aa(B,bool,R1,aa(A,B,G,Q2))) )
         => pp(aa(B,bool,R1,aa(option(A),B,option_case(B,A,F,G),X1))) ) ) ) ).

tff(fact_32_map__comp__Some__iff,axiom,
    ! [C: $tType,B: $tType,A: $tType,Va: A,K: C,M2: fun(C,option(B)),M11: fun(B,option(A))] :
      ( ( map_comp(B,A,C,M11,M2,K) = aa(A,option(A),some(A),Va) )
    <=> ? [K1: B] :
          ( ( aa(C,option(B),M2,K) = aa(B,option(B),some(B),K1) )
          & ( aa(B,option(A),M11,K1) = aa(A,option(A),some(A),Va) ) ) ) ).

tff(fact_33_map__add__assoc,axiom,
    ! [B: $tType,A: $tType,M3: fun(A,option(B)),M2: fun(A,option(B)),M11: fun(A,option(B))] : map_add(A,B,M11,map_add(A,B,M2,M3)) = map_add(A,B,map_add(A,B,M11,M2),M3) ).

tff(fact_34_map__add__find__right,axiom,
    ! [B: $tType,A: $tType,M1: fun(B,option(A)),Xx: A,K: B,N: fun(B,option(A))] :
      ( ( aa(B,option(A),N,K) = aa(A,option(A),some(A),Xx) )
     => ( aa(B,option(A),map_add(B,A,M1,N),K) = aa(A,option(A),some(A),Xx) ) ) ).

tff(fact_35_map__add__def,axiom,
    ! [B: $tType,A: $tType,M2: fun(A,option(B)),M11: fun(A,option(B)),X2: A] : aa(A,option(B),map_add(A,B,M11,M2),X2) = aa(option(B),option(B),option_case(option(B),B,aa(A,option(B),M11,X2),some(B)),aa(A,option(B),M2,X2)) ).

tff(fact_36_map__comp__simps_I2_J,axiom,
    ! [B: $tType,C: $tType,A: $tType,M11: fun(A,option(C)),K2: A,K: B,M2: fun(B,option(A))] :
      ( ( aa(B,option(A),M2,K) = aa(A,option(A),some(A),K2) )
     => ( map_comp(A,C,B,M11,M2,K) = aa(A,option(C),M11,K2) ) ) ).

tff(fact_37_lconf__def,axiom,
    ! [A: $tType,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,A))))))))] :
      ( lconf(A,Pa,Hb,Lb,Ea)
    <=> ! [V1: list(char),V: val] :
          ( ( aa(list(char),option(val),Lb,V1) = aa(val,option(val),some(val),V) )
         => ? [T4: ty] :
              ( ( aa(list(char),option(ty),Ea,V1) = aa(ty,option(ty),some(ty),T4) )
              & conf(A,Pa,Hb,V,T4) ) ) ) ).

tff(fact_38_pos__bound__cps__single__def,axiom,
    ! [A: $tType,Va: A,X2: fun(A,option(product_prod(bool,list(code_term)))),Xa: code_code_numeral] : quickc868703951single(A,Va,X2,Xa) = aa(A,option(product_prod(bool,list(code_term))),X2,Va) ).

tff(fact_39_pos__bound__cps__plus__def,axiom,
    ! [A: $tType,B2: fun(fun(A,option(product_prod(bool,list(code_term)))),fun(code_code_numeral,option(product_prod(bool,list(code_term))))),A4: fun(fun(A,option(product_prod(bool,list(code_term)))),fun(code_code_numeral,option(product_prod(bool,list(code_term))))),X2: fun(A,option(product_prod(bool,list(code_term)))),Xa: code_code_numeral] : quickc665717985s_plus(A,A4,B2,X2,Xa) = aa(option(product_prod(bool,list(code_term))),option(product_prod(bool,list(code_term))),option_case(option(product_prod(bool,list(code_term))),product_prod(bool,list(code_term)),aa(code_code_numeral,option(product_prod(bool,list(code_term))),aa(fun(A,option(product_prod(bool,list(code_term)))),fun(code_code_numeral,option(product_prod(bool,list(code_term)))),B2,X2),Xa),some(product_prod(bool,list(code_term)))),aa(code_code_numeral,option(product_prod(bool,list(code_term))),aa(fun(A,option(product_prod(bool,list(code_term)))),fun(code_code_numeral,option(product_prod(bool,list(code_term)))),A4,X2),Xa)) ).

tff(fact_40_cps__plus__def,axiom,
    ! [A: $tType,B2: fun(fun(A,option(list(code_term))),option(list(code_term))),A4: fun(fun(A,option(list(code_term))),option(list(code_term))),X2: fun(A,option(list(code_term)))] : quickcheck_cps_plus(A,A4,B2,X2) = aa(option(list(code_term)),option(list(code_term)),option_case(option(list(code_term)),list(code_term),aa(fun(A,option(list(code_term))),option(list(code_term)),B2,X2),some(list(code_term))),aa(fun(A,option(list(code_term))),option(list(code_term)),A4,X2)) ).

tff(fact_41_cps__bind__def,axiom,
    ! [B: $tType,A: $tType,F: fun(B,fun(fun(A,option(list(code_term))),option(list(code_term)))),M1: fun(fun(B,option(list(code_term))),option(list(code_term))),X2: fun(A,option(list(code_term)))] : quickcheck_cps_bind(B,A,M1,F,X2) = aa(fun(B,option(list(code_term))),option(list(code_term)),M1,combc(B,fun(A,option(list(code_term))),option(list(code_term)),F,X2)) ).

tff(fact_42_map__add__upd__left,axiom,
    ! [A: $tType,B: $tType,U1: B,E1: fun(A,option(B)),E2: fun(A,option(B)),M1: A] :
      ( ~ member(A,M1,dom(A,B,E2))
     => ( map_add(A,B,fun_upd(A,option(B),E1,M1,aa(B,option(B),some(B),U1)),E2) = fun_upd(A,option(B),map_add(A,B,E1,E2),M1,aa(B,option(B),some(B),U1)) ) ) ).

tff(fact_43_domI,axiom,
    ! [A: $tType,B: $tType,B2: A,A4: B,M1: fun(B,option(A))] :
      ( ( aa(B,option(A),M1,A4) = aa(A,option(A),some(A),B2) )
     => member(B,A4,dom(B,A,M1)) ) ).

tff(fact_44_map__add__dom__app__simps_I2_J,axiom,
    ! [B: $tType,A: $tType,L2: fun(A,option(B)),L1: fun(A,option(B)),M1: A] :
      ( ~ member(A,M1,dom(A,B,L1))
     => ( aa(A,option(B),map_add(A,B,L1,L2),M1) = aa(A,option(B),L2,M1) ) ) ).

tff(fact_45_map__add__dom__app__simps_I3_J,axiom,
    ! [B: $tType,A: $tType,L1: fun(A,option(B)),L2: fun(A,option(B)),M1: A] :
      ( ~ member(A,M1,dom(A,B,L2))
     => ( aa(A,option(B),map_add(A,B,L1,L2),M1) = aa(A,option(B),L1,M1) ) ) ).

tff(fact_46_map__add__dom__app__simps_I1_J,axiom,
    ! [B: $tType,A: $tType,L1: fun(A,option(B)),L2: fun(A,option(B)),M1: A] :
      ( member(A,M1,dom(A,B,L2))
     => ( aa(A,option(B),map_add(A,B,L1,L2),M1) = aa(A,option(B),L2,M1) ) ) ).

tff(fact_47_domD,axiom,
    ! [A: $tType,B: $tType,M1: fun(A,option(B)),A4: A] :
      ( member(A,A4,dom(A,B,M1))
     => ? [B1: B] : aa(A,option(B),M1,A4) = aa(B,option(B),some(B),B1) ) ).

tff(fact_48_WTrtVal,axiom,
    ! [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))))))))))),Ta: ty,Va: val,Hb: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val)))))] :
      ( ( typeof_h(Hb,Va) = aa(ty,option(ty),some(ty),Ta) )
     => wTrt(Pa,Hb,Ea,val1(list(char),Va),Ta) ) ).

tff(fact_49_dom__const,axiom,
    ! [B: $tType,A: $tType,F: fun(A,B)] : dom(A,B,combb(B,option(B),A,some(B),F)) = top_top(fun(A,bool)) ).

tff(fact_50_typeof__conf,axiom,
    ! [A: $tType,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,A)))))))),Ta: ty,Va: val,Hb: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val)))))] :
      ( ( typeof_h(Hb,Va) = aa(ty,option(ty),some(ty),Ta) )
     => conf(A,Pa,Hb,Va,Ta) ) ).

tff(fact_51_map__comp__def,axiom,
    ! [B: $tType,C: $tType,A: $tType,G: fun(A,option(C)),F: fun(C,option(B)),X2: A] : map_comp(C,B,A,F,G,X2) = aa(option(C),option(B),option_case(option(B),C,none(B),F),aa(A,option(C),G,X2)) ).

tff(fact_52_lconf__empty,axiom,
    ! [A: $tType,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,A))))))))] : lconf(A,Pa,Hb,combk(option(val),list(char),none(val)),Ea) ).

tff(fact_53_not__None__eq,axiom,
    ! [A: $tType,X1: option(A)] :
      ( ( X1 != none(A) )
    <=> ? [Y3: A] : X1 = aa(A,option(A),some(A),Y3) ) ).

tff(fact_54_not__Some__eq,axiom,
    ! [A: $tType,X1: option(A)] :
      ( ! [Y3: A] : X1 != aa(A,option(A),some(A),Y3)
    <=> ( X1 = none(A) ) ) ).

tff(fact_55_map__add__None,axiom,
    ! [B: $tType,A: $tType,K: B,N: fun(B,option(A)),M1: fun(B,option(A))] :
      ( ( aa(B,option(A),map_add(B,A,M1,N),K) = none(A) )
    <=> ( ( aa(B,option(A),N,K) = none(A) )
        & ( aa(B,option(A),M1,K) = none(A) ) ) ) ).

tff(fact_56_bind__lzero,axiom,
    ! [B: $tType,A: $tType,F: fun(B,option(A))] : aa(fun(B,option(A)),option(A),aa(option(B),fun(fun(B,option(A)),option(A)),bind(B,A),none(B)),F) = none(A) ).

tff(fact_57_empty__upd__none,axiom,
    ! [A: $tType,B: $tType,X1: A,X2: A] : aa(A,option(B),fun_upd(A,option(B),combk(option(B),A,none(B)),X1,none(B)),X2) = none(B) ).

tff(fact_58_bind__rzero,axiom,
    ! [B: $tType,A: $tType,X1: option(B)] : aa(fun(B,option(A)),option(A),aa(option(B),fun(fun(B,option(A)),option(A)),bind(B,A),X1),combk(option(A),B,none(A))) = none(A) ).

tff(fact_59_map__comp__empty_I2_J,axiom,
    ! [A: $tType,C: $tType,B: $tType,M1: fun(A,option(C)),X2: A] : map_comp(C,B,A,combk(option(B),C,none(B)),M1,X2) = none(B) ).

tff(fact_60_map__comp__empty_I1_J,axiom,
    ! [A: $tType,C: $tType,B: $tType,M1: fun(C,option(B)),X2: A] : map_comp(C,B,A,M1,combk(option(C),A,none(C)),X2) = none(B) ).

tff(fact_61_dom__def,axiom,
    ! [A: $tType,B: $tType,M1: fun(A,option(B))] : dom(A,B,M1) = collect(A,combb(bool,bool,A,fNot,combc(A,option(B),bool,combb(option(B),fun(option(B),bool),A,fequal(option(B)),M1),none(B)))) ).

tff(fact_62_domIff,axiom,
    ! [A: $tType,B: $tType,M1: fun(A,option(B)),A4: A] :
      ( member(A,A4,dom(A,B,M1))
    <=> ( aa(A,option(B),M1,A4) != none(B) ) ) ).

tff(fact_63_option_Osimps_I2_J,axiom,
    ! [A: $tType,A3: A] : none(A) != aa(A,option(A),some(A),A3) ).

tff(fact_64_option_Osimps_I3_J,axiom,
    ! [A: $tType,A3: A] : aa(A,option(A),some(A),A3) != none(A) ).

tff(fact_65_option_Osimps_I4_J,axiom,
    ! [B: $tType,A: $tType,F2: fun(B,A),F1: A] : aa(option(B),A,option_case(A,B,F1,F2),none(B)) = F1 ).

tff(fact_66_typeof__lit__conf,axiom,
    ! [A: $tType,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,A)))))))),Ta: ty,Va: val] :
      ( ( typeof_h(combk(option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val)))),nat,none(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Va) = aa(ty,option(ty),some(ty),Ta) )
     => conf(A,Pa,Hb,Va,Ta) ) ).

tff(fact_67_map__comp__simps_I1_J,axiom,
    ! [B: $tType,A: $tType,C: $tType,M11: fun(A,option(C)),K: B,M2: fun(B,option(A))] :
      ( ( aa(B,option(A),M2,K) = none(A) )
     => ( map_comp(A,C,B,M11,M2,K) = none(C) ) ) ).

tff(fact_68_empty__map__add,axiom,
    ! [B: $tType,A: $tType,M1: fun(A,option(B))] : map_add(A,B,combk(option(B),A,none(B)),M1) = M1 ).

tff(fact_69_map__add__empty,axiom,
    ! [B: $tType,A: $tType,M1: fun(A,option(B))] : map_add(A,B,M1,combk(option(B),A,none(B))) = M1 ).

tff(fact_70_is__none__def,axiom,
    ! [A: $tType,X1: option(A)] :
      ( is_none(A,X1)
    <=> ( X1 = none(A) ) ) ).

tff(fact_71_is__none__code_I1_J,axiom,
    ! [A: $tType] : is_none(A,none(A)) ).

tff(fact_72_map__upd__nonempty,axiom,
    ! [A: $tType,B: $tType,X1: B,K: A,T3: fun(A,option(B))] :
      ~ ! [X3: A] : aa(A,option(B),fun_upd(A,option(B),T3,K,aa(B,option(B),some(B),X1)),X3) = none(B) ).

tff(fact_73_option_Orecs_I1_J,axiom,
    ! [B: $tType,A: $tType,F2: fun(B,A),F1: A] : option_rec(A,B,F1,F2,none(B)) = F1 ).

tff(fact_74_map__add__SomeD,axiom,
    ! [B: $tType,A: $tType,X1: A,K: B,N: fun(B,option(A)),M1: fun(B,option(A))] :
      ( ( aa(B,option(A),map_add(B,A,M1,N),K) = aa(A,option(A),some(A),X1) )
     => ( ( aa(B,option(A),N,K) = aa(A,option(A),some(A),X1) )
        | ( ( aa(B,option(A),N,K) = none(A) )
          & ( aa(B,option(A),M1,K) = aa(A,option(A),some(A),X1) ) ) ) ) ).

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

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

tff(fact_77_Collect__def,axiom,
    ! [A: $tType,Pa: fun(A,bool)] : collect(A,Pa) = Pa ).

tff(fact_78_map__add__Some__iff,axiom,
    ! [B: $tType,A: $tType,X1: A,K: B,N: fun(B,option(A)),M1: fun(B,option(A))] :
      ( ( aa(B,option(A),map_add(B,A,M1,N),K) = aa(A,option(A),some(A),X1) )
    <=> ( ( aa(B,option(A),N,K) = aa(A,option(A),some(A),X1) )
        | ( ( aa(B,option(A),N,K) = none(A) )
          & ( aa(B,option(A),M1,K) = aa(A,option(A),some(A),X1) ) ) ) ) ).

tff(fact_79_map__comp__None__iff,axiom,
    ! [C: $tType,B: $tType,A: $tType,K: C,M2: fun(C,option(B)),M11: fun(B,option(A))] :
      ( ( map_comp(B,A,C,M11,M2,K) = none(A) )
    <=> ( ( aa(C,option(B),M2,K) = none(B) )
        | ? [K1: B] :
            ( ( aa(C,option(B),M2,K) = aa(B,option(B),some(B),K1) )
            & ( aa(B,option(A),M11,K1) = none(A) ) ) ) ) ).

tff(fact_80_option__caseE,axiom,
    ! [A: $tType,X1: option(A),Q1: fun(A,bool),Pa: bool] :
      ( pp(aa(option(A),bool,option_case(bool,A,Pa,Q1),X1))
     => ( ( ( X1 = none(A) )
         => ~ pp(Pa) )
       => ~ ! [Y2: A] :
              ( ( X1 = aa(A,option(A),some(A),Y2) )
             => ~ pp(aa(A,bool,Q1,Y2)) ) ) ) ).

tff(fact_81_typeof__lit__typeof,axiom,
    ! [Hb: fun(nat,option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Ta: ty,Va: val] :
      ( ( typeof_h(combk(option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val)))),nat,none(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Va) = aa(ty,option(ty),some(ty),Ta) )
     => ( typeof_h(Hb,Va) = aa(ty,option(ty),some(ty),Ta) ) ) ).

tff(fact_82_top1I,axiom,
    ! [A: $tType,X1: A] : pp(aa(A,bool,top_top(fun(A,bool)),X1)) ).

tff(fact_83_UNIV__I,axiom,
    ! [A: $tType,X1: A] : member(A,X1,top_top(fun(A,bool))) ).

tff(fact_84_UNIV__def,axiom,
    ! [A: $tType] : top_top(fun(A,bool)) = collect(A,combk(bool,A,fTrue)) ).

tff(fact_85_iso__tuple__UNIV__I,axiom,
    ! [A: $tType,X1: A] : member(A,X1,top_top(fun(A,bool))) ).

tff(fact_86_option_Oexhaust,axiom,
    ! [A: $tType,Y: option(A)] :
      ( ( Y != none(A) )
     => ~ ! [A2: A] : Y != aa(A,option(A),some(A),A2) ) ).

tff(fact_87_typeof__lit__is__type,axiom,
    ! [A: $tType,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,A)))))))),Ta: ty,Va: val] :
      ( ( typeof_h(combk(option(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val)))),nat,none(product_prod(list(char),fun(product_prod(list(char),list(char)),option(val))))),Va) = aa(ty,option(ty),some(ty),Ta) )
     => is_type(A,Pa,Ta) ) ).

tff(fact_88_top__apply,axiom,
    ! [B: $tType,A: $tType] :
      ( top(A)
     => ! [X1: B] : aa(B,A,top_top(fun(B,A)),X1) = top_top(A) ) ).

tff(fact_89_UNIV__eq__I,axiom,
    ! [A: $tType,A1: fun(A,bool)] :
      ( ! [X3: A] : member(A,X3,A1)
     => ( top_top(fun(A,bool)) = A1 ) ) ).

tff(fact_90_UNIV__witness,axiom,
    ! [A: $tType] :
    ? [X3: A] : member(A,X3,top_top(fun(A,bool))) ).

tff(fact_91_Option_Omap__def,axiom,
    ! [B: $tType,A: $tType,X2: fun(A,B)] : aa(fun(A,B),fun(option(A),option(B)),map(A,B),X2) = option_case(option(B),A,none(B),combb(B,option(B),A,some(B),X2)) ).

tff(fact_92_conf__def,axiom,
    ! [A: $tType,Ta: ty,Va: 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,A))))))))] :
      ( conf(A,Pa,Hb,Va,Ta)
    <=> ? [T2: ty] :
          ( ( typeof_h(Hb,Va) = aa(ty,option(ty),some(ty),T2) )
          & widen(A,Pa,T2,Ta) ) ) ).

tff(fact_93_option__map__eq__Some,axiom,
    ! [B: $tType,A: $tType,Y1: A,Xo: option(B),F: fun(B,A)] :
      ( ( aa(option(B),option(A),aa(fun(B,A),fun(option(B),option(A)),map(B,A),F),Xo) = aa(A,option(A),some(A),Y1) )
    <=> ? [Z: B] :
          ( ( Xo = aa(B,option(B),some(B),Z) )
          & ( aa(B,A,F,Z) = Y1 ) ) ) ).

tff(fact_94_option__map__Some,axiom,
    ! [A: $tType,B: $tType,X1: B,F: fun(B,A)] : aa(option(B),option(A),aa(fun(B,A),fun(option(B),option(A)),map(B,A),F),aa(B,option(B),some(B),X1)) = aa(A,option(A),some(A),aa(B,A,F,X1)) ).

tff(fact_95_option__map__is__None,axiom,
    ! [A: $tType,B: $tType,Opt: option(B),F: fun(B,A)] :
      ( ( aa(option(B),option(A),aa(fun(B,A),fun(option(B),option(A)),map(B,A),F),Opt) = none(A) )
    <=> ( Opt = none(B) ) ) ).

tff(fact_96_option__map__None,axiom,
    ! [B: $tType,A: $tType,F: fun(B,A)] : aa(option(B),option(A),aa(fun(B,A),fun(option(B),option(A)),map(B,A),F),none(B)) = none(A) ).

tff(fact_97_dom__option__map,axiom,
    ! [B: $tType,C: $tType,A: $tType,M1: fun(A,option(C)),F: fun(A,fun(C,B))] : dom(A,B,combs(A,option(C),option(B),combb(fun(C,B),fun(option(C),option(B)),A,map(C,B),F),M1)) = dom(A,C,M1) ).

tff(fact_98_conf__widen,axiom,
    ! [A: $tType,T1: ty,Ta: ty,Va: 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,A))))))))] :
      ( conf(A,Pa,Hb,Va,Ta)
     => ( widen(A,Pa,Ta,T1)
       => conf(A,Pa,Hb,Va,T1) ) ) ).

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

%----Arities (2)
tff(arity_fun___Orderings_Otop,axiom,
    ! [T_1: $tType,T_2: $tType] :
      ( top(T_2)
     => top(fun(T_1,T_2)) ) ).

tff(arity_HOL_Obool___Orderings_Otop,axiom,
    top(bool) ).

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

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

tff(help_fNot_1_1_U,axiom,
    ! [P: bool] :
      ( ~ pp(aa(bool,bool,fNot,P))
      | ~ pp(P) ) ).

tff(help_fNot_2_1_U,axiom,
    ! [P: bool] :
      ( pp(P)
      | pp(aa(bool,bool,fNot,P)) ) ).

tff(help_COMBB_1_1_U,axiom,
    ! [C: $tType,B: $tType,A: $tType,R: A,Q: fun(A,B),P: fun(B,C)] : aa(A,C,combb(B,C,A,P,Q),R) = aa(B,C,P,aa(A,B,Q,R)) ).

tff(help_COMBC_1_1_U,axiom,
    ! [A: $tType,C: $tType,B: $tType,R: A,Q: B,P: fun(A,fun(B,C))] : aa(A,C,combc(A,B,C,P,Q),R) = aa(B,C,aa(A,fun(B,C),P,R),Q) ).

tff(help_COMBK_1_1_U,axiom,
    ! [B: $tType,A: $tType,Q: B,P: A] : aa(B,A,combk(A,B,P),Q) = P ).

tff(help_COMBS_1_1_U,axiom,
    ! [C: $tType,B: $tType,A: $tType,R: A,Q: fun(A,B),P: fun(A,fun(B,C))] : aa(A,C,combs(A,B,C,P,Q),R) = aa(B,C,aa(A,fun(B,C),P,R),aa(A,B,Q,R)) ).

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

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

tff(help_fequal_1_1_T,axiom,
    ! [A: $tType,Y: A,X: A] :
      ( ~ pp(aa(A,bool,aa(A,fun(A,bool),fequal(A),X),Y))
      | ( X = Y ) ) ).

tff(help_fequal_2_1_T,axiom,
    ! [A: $tType,Y: A,X: A] :
      ( ( X != Y )
      | pp(aa(A,bool,aa(A,fun(A,bool),fequal(A),X),Y)) ) ).

%----Conjectures (1)
tff(conj_0,conjecture,
    lconf(product_prod(list(list(char)),exp(list(char))),p,ha,fun_upd(list(char),option(val),la,v1,aa(val,option(val),some(val),v)),e) ).

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