TPTP Problem File: COM288_1.p

View Solutions - Solve Problem

%------------------------------------------------------------------------------
% File     : COM288_1 : TPTP v9.3.1. Released v9.3.0.
% Domain   : Computing Theory
% Problem  : SQL-Preservation-Difference-tvalue-tvalue
% Version  : Especial.
% English  :

% Refs     : [GE+15] Grewe et al. (2015), Type Systems for the Masses: Deri
%          : [GE+18] Grewe et al. (2018), System Description: An Infrastruc
%          : [GE+18] Grewe et al. (2018), Exploration of Language Specifica
%          : [Gre19] Grewe (2019), Automating Type Soundness Proofs for Dom
%          : [Gre24] Grewe (2015), Email to Geoff Sutcliffe
% Source   : [Gre24]
% Names    : SQL-Preservation-Difference-tvalue-tvalue [Gre24]

% Status   : Theorem
% Rating   : 0.50 v9.3.0
% Syntax   : Number of formulae    :  413 ( 115 unt; 117 typ;   0 def)
%            Number of atoms       : 1156 ( 865 equ)
%            Maximal formula atoms :  129 (   3 avg)
%            Number of connectives : 1134 ( 274   ~; 184   |; 534   &)
%                                         (  17 <=>; 125  =>;   0  <=;   0 <~>)
%            Maximal formula depth :   31 (   6 avg)
%            Maximal term depth    :    8 (   1 avg)
%            Number of types       :   21 (  20 usr)
%            Number of type conns  :  133 (  78   >;  55   *;   0   +;   0  <<)
%            Number of predicates  :   20 (  19 usr;   0 prp; 1-3 aty)
%            Number of functors    :   78 (  78 usr;  19 con; 0-3 aty)
%            Number of variables   : 1324 ( 850   !; 474   ?;1324   :)
% SPC      : TF0_THM_EQU_NAR_NDT

% Comments :
%------------------------------------------------------------------------------
tff('Row_type',type,
    vRow: $tType ).

tff('Pred_type',type,
    vPred: $tType ).

tff('Name_type',type,
    vName: $tType ).

tff('AttrL_type',type,
    vAttrL: $tType ).

tff('RawTable_type',type,
    vRawTable: $tType ).

tff('OptRawTable_type',type,
    vOptRawTable: $tType ).

tff('FType_type',type,
    vFType: $tType ).

tff('OptTType_type',type,
    vOptTType: $tType ).

tff('TTContext_type',type,
    vTTContext: $tType ).

tff('Query_type',type,
    vQuery: $tType ).

tff('Val_type',type,
    vVal: $tType ).

tff('OptTable_type',type,
    vOptTable: $tType ).

tff('TStore_type',type,
    vTStore: $tType ).

tff('Exp_type',type,
    vExp: $tType ).

tff('Table_type',type,
    vTable: $tType ).

tff('TType_type',type,
    vTType: $tType ).

tff('Select_type',type,
    vSelect: $tType ).

tff('OptFType_type',type,
    vOptFType: $tType ).

tff('OptVal_type',type,
    vOptVal: $tType ).

tff('OptQuery_type',type,
    vOptQuery: $tType ).

tff(rempty_type,type,
    vrempty: vRow ).

tff(constant_type,type,
    vconstant: vVal > vExp ).

tff(lookup_type,type,
    vlookup: vName > vExp ).

tff(tvalue_type,type,
    vtvalue: vTable > vQuery ).

tff(acons_type,type,
    vacons: ( vName * vAttrL ) > vAttrL ).

tff(someQuery_type,type,
    vsomeQuery: vQuery > vOptQuery ).

tff(someFType_type,type,
    vsomeFType: vFType > vOptFType ).

tff(all_type,type,
    vall: vSelect ).

tff(rcons_type,type,
    vrcons: ( vVal * vRow ) > vRow ).

tff(ttcons_type,type,
    vttcons: ( vName * vFType * vTType ) > vTType ).

tff(tempty_type,type,
    vtempty: vRawTable ).

tff(selectFromWhere_type,type,
    vselectFromWhere: ( vSelect * vName * vPred ) > vQuery ).

tff(aempty_type,type,
    vaempty: vAttrL ).

tff(noRawTable_type,type,
    vnoRawTable: vOptRawTable ).

tff(tcons_type,type,
    vtcons: ( vRow * vRawTable ) > vRawTable ).

tff(someTType_type,type,
    vsomeTType: vTType > vOptTType ).

tff(someVal_type,type,
    vsomeVal: vVal > vOptVal ).

tff('Intersection_type',type,
    vIntersection: ( vQuery * vQuery ) > vQuery ).

tff(ptrue_type,type,
    vptrue: vPred ).

tff(someRawTable_type,type,
    vsomeRawTable: vRawTable > vOptRawTable ).

tff(bindStore_type,type,
    vbindStore: ( vName * vTable * vTStore ) > vTStore ).

tff(noQuery_type,type,
    vnoQuery: vOptQuery ).

tff(not_type,type,
    vnot: vPred > vPred ).

tff(noVal_type,type,
    vnoVal: vOptVal ).

tff(noTType_type,type,
    vnoTType: vOptTType ).

tff(ttempty_type,type,
    vttempty: vTType ).

tff(noTable_type,type,
    vnoTable: vOptTable ).

tff('Difference_type',type,
    vDifference: ( vQuery * vQuery ) > vQuery ).

tff(noFType_type,type,
    vnoFType: vOptFType ).

tff('Union_type',type,
    vUnion: ( vQuery * vQuery ) > vQuery ).

tff(q1_type,type,
    vq1: vQuery ).

tff(bindContext_type,type,
    vbindContext: ( vName * vTType * vTTContext ) > vTTContext ).

tff(lt_type,type,
    vlt: ( vExp * vExp ) > vPred ).

tff(emptyContext_type,type,
    vemptyContext: vTTContext ).

tff(gt_type,type,
    vgt: ( vExp * vExp ) > vPred ).

tff(someTable_type,type,
    vsomeTable: vTable > vOptTable ).

tff(emptyStore_type,type,
    vemptyStore: vTStore ).

tff(eq_type,type,
    veq: ( vExp * vExp ) > vPred ).

tff(and_type,type,
    vand: ( vPred * vPred ) > vPred ).

tff(list_type,type,
    vlist: vAttrL > vSelect ).

tff(table_type,type,
    vtable: ( vAttrL * vRawTable ) > vTable ).

tff(q2_type,type,
    vq2: vQuery ).

tff(projectTable_type,type,
    vprojectTable: ( vSelect * vTable ) > vOptTable ).

tff(matchingAttrL_type,type,
    vmatchingAttrL: ( vTType * vAttrL ) > $o ).

tff(isSomeTType_type,type,
    visSomeTType: vOptTType > $o ).

tff(initFType_type,type,
    vinitFType: vFType ).

tff(isSomeRawTable_type,type,
    visSomeRawTable: vOptRawTable > $o ).

tff(projectTypeAttrL_type,type,
    vprojectTypeAttrL: ( vAttrL * vTType ) > vOptTType ).

tff(enumVal_type,type,
    venumVal: vVal > vVal ).

tff(initVal_type,type,
    vinitVal: vVal ).

tff(getRaw_type,type,
    vgetRaw: vTable > vRawTable ).

tff(sameLength_type,type,
    vsameLength: ( vRawTable * vRawTable ) > $o ).

tff(filterSingleRow_type,type,
    vfilterSingleRow: ( vPred * vAttrL * vRow ) > $o ).

tff(lessThan_type,type,
    vlessThan: ( vVal * vVal ) > $o ).

tff(projectFirstRaw_type,type,
    vprojectFirstRaw: vRawTable > vRawTable ).

tff(isSomeVal_type,type,
    visSomeVal: vOptVal > $o ).

tff(lookupStore_type,type,
    vlookupStore: ( vName * vTStore ) > vOptTable ).

tff(welltypedRawtable_type,type,
    vwelltypedRawtable: ( vTType * vRawTable ) > $o ).

tff(rawUnion_type,type,
    vrawUnion: ( vRawTable * vRawTable ) > vRawTable ).

tff(greaterThan_type,type,
    vgreaterThan: ( vVal * vVal ) > $o ).

tff(isValue_type,type,
    visValue: vQuery > $o ).

tff(welltypedtable_type,type,
    vwelltypedtable: ( vTType * vTable ) > $o ).

tff(enumFType_type,type,
    venumFType: vFType > vFType ).

tff(attachColToFrontRaw_type,type,
    vattachColToFrontRaw: ( vRawTable * vRawTable ) > vRawTable ).

tff(projectEmptyCol_type,type,
    vprojectEmptyCol: vRawTable > vRawTable ).

tff(isSomeFType_type,type,
    visSomeFType: vOptFType > $o ).

tff(filterTable_type,type,
    vfilterTable: ( vTable * vPred ) > vTable ).

tff(enumName_type,type,
    venumName: vName > vName ).

tff(getAttrL_type,type,
    vgetAttrL: vTable > vAttrL ).

tff(tcheckPred_type,type,
    vtcheckPred: ( vPred * vTType ) > $o ).

tff(evalExpRow_type,type,
    vevalExpRow: ( vExp * vAttrL * vRow ) > vOptVal ).

tff(rowIn_type,type,
    vrowIn: ( vRow * vRawTable ) > $o ).

tff(findCol_type,type,
    vfindCol: ( vName * vAttrL * vRawTable ) > vOptRawTable ).

tff(lookupContext_type,type,
    vlookupContext: ( vName * vTTContext ) > vOptTType ).

tff(reduce_type,type,
    vreduce: ( vQuery * vTStore ) > vOptQuery ).

tff(fieldType_type,type,
    vfieldType: vVal > vFType ).

tff(rawIntersection_type,type,
    vrawIntersection: ( vRawTable * vRawTable ) > vRawTable ).

tff(typeOfExp_type,type,
    vtypeOfExp: ( vExp * vTType ) > vOptFType ).

tff(dropFirstColRaw_type,type,
    vdropFirstColRaw: vRawTable > vRawTable ).

tff(findColType_type,type,
    vfindColType: ( vName * vTType ) > vOptFType ).

tff(initName_type,type,
    vinitName: vName ).

tff(filterRows_type,type,
    vfilterRows: ( vRawTable * vAttrL * vPred ) > vRawTable ).

tff(isSomeTable_type,type,
    visSomeTable: vOptTable > $o ).

tff(projectType_type,type,
    vprojectType: ( vSelect * vTType ) > vOptTType ).

tff(welltypedRow_type,type,
    vwelltypedRow: ( vTType * vRow ) > $o ).

tff(projectCols_type,type,
    vprojectCols: ( vAttrL * vAttrL * vRawTable ) > vOptRawTable ).

tff(isSomeQuery_type,type,
    visSomeQuery: vOptQuery > $o ).

tff(storeContextConsistent_type,type,
    vstoreContextConsistent: ( vTStore * vTTContext ) > $o ).

tff(rawDifference_type,type,
    vrawDifference: ( vRawTable * vRawTable ) > vRawTable ).

tff(ptcheck_type,type,
    vptcheck: ( vTTContext * vQuery * vTType ) > $o ).

tff(append_type,type,
    vappend: ( vAttrL * vAttrL ) > vAttrL ).

tff(getFType_type,type,
    vgetFType: vOptFType > vFType ).

tff(getQuery_type,type,
    vgetQuery: vOptQuery > vQuery ).

tff(getTType_type,type,
    vgetTType: vOptTType > vTType ).

tff(getVal_type,type,
    vgetVal: vOptVal > vVal ).

tff(getTable_type,type,
    vgetTable: vOptTable > vTable ).

tff(getRawTable_type,type,
    vgetRawTable: vOptRawTable > vRawTable ).

tff('dom-Select',axiom,
    ! [VX: vSelect] :
      ( ( VX = vall )
      | ? [VAttrL0: vAttrL] : ( VX = vlist(VAttrL0) ) ) ).

tff('EQ-list',axiom,
    ! [VAttrL0: vAttrL,VAttrL1: vAttrL] :
      ( ( vlist(VAttrL0) = vlist(VAttrL1) )
     => ( VAttrL0 = VAttrL1 ) ) ).

tff('DIFF-all-list',axiom,
    ! [VAttrL0: vAttrL] : ( vall != vlist(VAttrL0) ) ).

tff('dom-Query',axiom,
    ! [VX: vQuery] :
      ( ? [VTable0: vTable] : ( VX = vtvalue(VTable0) )
      | ? [VSelect0: vSelect,VName0: vName,VPred0: vPred] : ( VX = vselectFromWhere(VSelect0,VName0,VPred0) )
      | ? [VQuery0: vQuery,VQuery1: vQuery] : ( VX = vUnion(VQuery0,VQuery1) )
      | ? [VQuery0: vQuery,VQuery1: vQuery] : ( VX = vIntersection(VQuery0,VQuery1) )
      | ? [VQuery0: vQuery,VQuery1: vQuery] : ( VX = vDifference(VQuery0,VQuery1) ) ) ).

tff('EQ-tvalue',axiom,
    ! [VTable0: vTable,VTable1: vTable] :
      ( ( vtvalue(VTable0) = vtvalue(VTable1) )
     => ( VTable0 = VTable1 ) ) ).

tff('EQ-selectFromWhere',axiom,
    ! [VName1: vName,VName0: vName,VSelect1: vSelect,VPred0: vPred,VSelect0: vSelect,VPred1: vPred] :
      ( ( vselectFromWhere(VSelect0,VName0,VPred0) = vselectFromWhere(VSelect1,VName1,VPred1) )
     => ( ( VSelect0 = VSelect1 )
        & ( VName0 = VName1 )
        & ( VPred0 = VPred1 ) ) ) ).

tff('EQ-Union',axiom,
    ! [VQuery0: vQuery,VQuery1: vQuery,VQuery2: vQuery,VQuery3: vQuery] :
      ( ( vUnion(VQuery0,VQuery1) = vUnion(VQuery2,VQuery3) )
     => ( ( VQuery0 = VQuery2 )
        & ( VQuery1 = VQuery3 ) ) ) ).

tff('EQ-Intersection',axiom,
    ! [VQuery0: vQuery,VQuery1: vQuery,VQuery2: vQuery,VQuery3: vQuery] :
      ( ( vIntersection(VQuery0,VQuery1) = vIntersection(VQuery2,VQuery3) )
     => ( ( VQuery0 = VQuery2 )
        & ( VQuery1 = VQuery3 ) ) ) ).

tff('EQ-Difference',axiom,
    ! [VQuery0: vQuery,VQuery1: vQuery,VQuery2: vQuery,VQuery3: vQuery] :
      ( ( vDifference(VQuery0,VQuery1) = vDifference(VQuery2,VQuery3) )
     => ( ( VQuery0 = VQuery2 )
        & ( VQuery1 = VQuery3 ) ) ) ).

tff('DIFF-tvalue-selectFromWhere',axiom,
    ! [VTable0: vTable,VSelect0: vSelect,VName0: vName,VPred0: vPred] : ( vtvalue(VTable0) != vselectFromWhere(VSelect0,VName0,VPred0) ) ).

tff('DIFF-tvalue-Union',axiom,
    ! [VTable0: vTable,VQuery0: vQuery,VQuery1: vQuery] : ( vtvalue(VTable0) != vUnion(VQuery0,VQuery1) ) ).

tff('DIFF-tvalue-Intersection',axiom,
    ! [VTable0: vTable,VQuery0: vQuery,VQuery1: vQuery] : ( vtvalue(VTable0) != vIntersection(VQuery0,VQuery1) ) ).

tff('DIFF-tvalue-Difference',axiom,
    ! [VTable0: vTable,VQuery0: vQuery,VQuery1: vQuery] : ( vtvalue(VTable0) != vDifference(VQuery0,VQuery1) ) ).

tff('DIFF-selectFromWhere-Union',axiom,
    ! [VName0: vName,VPred0: vPred,VSelect0: vSelect,VQuery1: vQuery,VQuery0: vQuery] : ( vselectFromWhere(VSelect0,VName0,VPred0) != vUnion(VQuery0,VQuery1) ) ).

tff('DIFF-selectFromWhere-Intersection',axiom,
    ! [VName0: vName,VPred0: vPred,VSelect0: vSelect,VQuery1: vQuery,VQuery0: vQuery] : ( vselectFromWhere(VSelect0,VName0,VPred0) != vIntersection(VQuery0,VQuery1) ) ).

tff('DIFF-selectFromWhere-Difference',axiom,
    ! [VName0: vName,VPred0: vPred,VSelect0: vSelect,VQuery1: vQuery,VQuery0: vQuery] : ( vselectFromWhere(VSelect0,VName0,VPred0) != vDifference(VQuery0,VQuery1) ) ).

tff('DIFF-Union-Intersection',axiom,
    ! [VQuery0: vQuery,VQuery1: vQuery,VQuery2: vQuery,VQuery3: vQuery] : ( vUnion(VQuery0,VQuery1) != vIntersection(VQuery2,VQuery3) ) ).

tff('DIFF-Union-Difference',axiom,
    ! [VQuery0: vQuery,VQuery1: vQuery,VQuery2: vQuery,VQuery3: vQuery] : ( vUnion(VQuery0,VQuery1) != vDifference(VQuery2,VQuery3) ) ).

tff('DIFF-Intersection-Difference',axiom,
    ! [VQuery0: vQuery,VQuery1: vQuery,VQuery2: vQuery,VQuery3: vQuery] : ( vIntersection(VQuery0,VQuery1) != vDifference(VQuery2,VQuery3) ) ).

tff('dom-OptTable',axiom,
    ! [VX: vOptTable] :
      ( ( VX = vnoTable )
      | ? [VTable0: vTable] : ( VX = vsomeTable(VTable0) ) ) ).

tff('EQ-someTable',axiom,
    ! [VTable0: vTable,VTable1: vTable] :
      ( ( vsomeTable(VTable0) = vsomeTable(VTable1) )
     => ( VTable0 = VTable1 ) ) ).

tff('DIFF-noTable-someTable',axiom,
    ! [VTable0: vTable] : ( vnoTable != vsomeTable(VTable0) ) ).

tff('dom-TType',axiom,
    ! [VX: vTType] :
      ( ( VX = vttempty )
      | ? [VName0: vName,VFType0: vFType,VTType0: vTType] : ( VX = vttcons(VName0,VFType0,VTType0) ) ) ).

tff('EQ-ttcons',axiom,
    ! [VName1: vName,VName0: vName,VTType0: vTType,VTType1: vTType,VFType0: vFType,VFType1: vFType] :
      ( ( vttcons(VName0,VFType0,VTType0) = vttcons(VName1,VFType1,VTType1) )
     => ( ( VName0 = VName1 )
        & ( VFType0 = VFType1 )
        & ( VTType0 = VTType1 ) ) ) ).

tff('DIFF-ttempty-ttcons',axiom,
    ! [VName0: vName,VFType0: vFType,VTType0: vTType] : ( vttempty != vttcons(VName0,VFType0,VTType0) ) ).

tff('dom-TTContext',axiom,
    ! [VX: vTTContext] :
      ( ( VX = vemptyContext )
      | ? [VName0: vName,VTType0: vTType,VTTContext0: vTTContext] : ( VX = vbindContext(VName0,VTType0,VTTContext0) ) ) ).

tff('EQ-bindContext',axiom,
    ! [VTTContext0: vTTContext,VName1: vName,VTTContext1: vTTContext,VName0: vName,VTType0: vTType,VTType1: vTType] :
      ( ( vbindContext(VName0,VTType0,VTTContext0) = vbindContext(VName1,VTType1,VTTContext1) )
     => ( ( VName0 = VName1 )
        & ( VTType0 = VTType1 )
        & ( VTTContext0 = VTTContext1 ) ) ) ).

tff('DIFF-emptyContext-bindContext',axiom,
    ! [VName0: vName,VTType0: vTType,VTTContext0: vTTContext] : ( vemptyContext != vbindContext(VName0,VTType0,VTTContext0) ) ).

tff('dom-OptRawTable',axiom,
    ! [VX: vOptRawTable] :
      ( ( VX = vnoRawTable )
      | ? [VRawTable0: vRawTable] : ( VX = vsomeRawTable(VRawTable0) ) ) ).

tff('EQ-someRawTable',axiom,
    ! [VRawTable0: vRawTable,VRawTable1: vRawTable] :
      ( ( vsomeRawTable(VRawTable0) = vsomeRawTable(VRawTable1) )
     => ( VRawTable0 = VRawTable1 ) ) ).

tff('DIFF-noRawTable-someRawTable',axiom,
    ! [VRawTable0: vRawTable] : ( vnoRawTable != vsomeRawTable(VRawTable0) ) ).

tff('dom-OptTType',axiom,
    ! [VX: vOptTType] :
      ( ( VX = vnoTType )
      | ? [VTType0: vTType] : ( VX = vsomeTType(VTType0) ) ) ).

tff('EQ-someTType',axiom,
    ! [VTType0: vTType,VTType1: vTType] :
      ( ( vsomeTType(VTType0) = vsomeTType(VTType1) )
     => ( VTType0 = VTType1 ) ) ).

tff('DIFF-noTType-someTType',axiom,
    ! [VTType0: vTType] : ( vnoTType != vsomeTType(VTType0) ) ).

tff('dom-Row',axiom,
    ! [VX: vRow] :
      ( ( VX = vrempty )
      | ? [VVal0: vVal,VRow0: vRow] : ( VX = vrcons(VVal0,VRow0) ) ) ).

tff('EQ-rcons',axiom,
    ! [VVal0: vVal,VRow0: vRow,VVal1: vVal,VRow1: vRow] :
      ( ( vrcons(VVal0,VRow0) = vrcons(VVal1,VRow1) )
     => ( ( VVal0 = VVal1 )
        & ( VRow0 = VRow1 ) ) ) ).

tff('DIFF-rempty-rcons',axiom,
    ! [VVal0: vVal,VRow0: vRow] : ( vrempty != vrcons(VVal0,VRow0) ) ).

tff('EQ-enumFType',axiom,
    ! [VFType0: vFType,VFType1: vFType] :
      ( ( venumFType(VFType0) = venumFType(VFType1) )
     => ( VFType0 = VFType1 ) ) ).

tff('DIFF-initFType-enumFType',axiom,
    ! [VFType0: vFType] : ( vinitFType != venumFType(VFType0) ) ).

tff('dom-RawTable',axiom,
    ! [VX: vRawTable] :
      ( ( VX = vtempty )
      | ? [VRow0: vRow,VRawTable0: vRawTable] : ( VX = vtcons(VRow0,VRawTable0) ) ) ).

tff('EQ-tcons',axiom,
    ! [VRow0: vRow,VRawTable0: vRawTable,VRow1: vRow,VRawTable1: vRawTable] :
      ( ( vtcons(VRow0,VRawTable0) = vtcons(VRow1,VRawTable1) )
     => ( ( VRow0 = VRow1 )
        & ( VRawTable0 = VRawTable1 ) ) ) ).

tff('DIFF-tempty-tcons',axiom,
    ! [VRow0: vRow,VRawTable0: vRawTable] : ( vtempty != vtcons(VRow0,VRawTable0) ) ).

tff('dom-OptQuery',axiom,
    ! [VX: vOptQuery] :
      ( ( VX = vnoQuery )
      | ? [VQuery0: vQuery] : ( VX = vsomeQuery(VQuery0) ) ) ).

tff('EQ-someQuery',axiom,
    ! [VQuery0: vQuery,VQuery1: vQuery] :
      ( ( vsomeQuery(VQuery0) = vsomeQuery(VQuery1) )
     => ( VQuery0 = VQuery1 ) ) ).

tff('DIFF-noQuery-someQuery',axiom,
    ! [VQuery0: vQuery] : ( vnoQuery != vsomeQuery(VQuery0) ) ).

tff('EQ-enumName',axiom,
    ! [VName0: vName,VName1: vName] :
      ( ( venumName(VName0) = venumName(VName1) )
     => ( VName0 = VName1 ) ) ).

tff('DIFF-initName-enumName',axiom,
    ! [VName0: vName] : ( vinitName != venumName(VName0) ) ).

tff('dom-Exp',axiom,
    ! [VX: vExp] :
      ( ? [VVal0: vVal] : ( VX = vconstant(VVal0) )
      | ? [VName0: vName] : ( VX = vlookup(VName0) ) ) ).

tff('EQ-constant',axiom,
    ! [VVal0: vVal,VVal1: vVal] :
      ( ( vconstant(VVal0) = vconstant(VVal1) )
     => ( VVal0 = VVal1 ) ) ).

tff('EQ-lookup',axiom,
    ! [VName0: vName,VName1: vName] :
      ( ( vlookup(VName0) = vlookup(VName1) )
     => ( VName0 = VName1 ) ) ).

tff('DIFF-constant-lookup',axiom,
    ! [VVal0: vVal,VName0: vName] : ( vconstant(VVal0) != vlookup(VName0) ) ).

tff('dom-Table',axiom,
    ! [VX: vTable] :
    ? [VAttrL0: vAttrL,VRawTable0: vRawTable] : ( VX = vtable(VAttrL0,VRawTable0) ) ).

tff('EQ-table',axiom,
    ! [VAttrL0: vAttrL,VRawTable0: vRawTable,VAttrL1: vAttrL,VRawTable1: vRawTable] :
      ( ( vtable(VAttrL0,VRawTable0) = vtable(VAttrL1,VRawTable1) )
     => ( ( VAttrL0 = VAttrL1 )
        & ( VRawTable0 = VRawTable1 ) ) ) ).

tff('dom-OptVal',axiom,
    ! [VX: vOptVal] :
      ( ( VX = vnoVal )
      | ? [VVal0: vVal] : ( VX = vsomeVal(VVal0) ) ) ).

tff('EQ-someVal',axiom,
    ! [VVal0: vVal,VVal1: vVal] :
      ( ( vsomeVal(VVal0) = vsomeVal(VVal1) )
     => ( VVal0 = VVal1 ) ) ).

tff('DIFF-noVal-someVal',axiom,
    ! [VVal0: vVal] : ( vnoVal != vsomeVal(VVal0) ) ).

tff('dom-Pred',axiom,
    ! [VX: vPred] :
      ( ( VX = vptrue )
      | ? [VPred0: vPred,VPred1: vPred] : ( VX = vand(VPred0,VPred1) )
      | ? [VPred0: vPred] : ( VX = vnot(VPred0) )
      | ? [VExp0: vExp,VExp1: vExp] : ( VX = veq(VExp0,VExp1) )
      | ? [VExp0: vExp,VExp1: vExp] : ( VX = vgt(VExp0,VExp1) )
      | ? [VExp0: vExp,VExp1: vExp] : ( VX = vlt(VExp0,VExp1) ) ) ).

tff('EQ-and',axiom,
    ! [VPred0: vPred,VPred1: vPred,VPred2: vPred,VPred3: vPred] :
      ( ( vand(VPred0,VPred1) = vand(VPred2,VPred3) )
     => ( ( VPred0 = VPred2 )
        & ( VPred1 = VPred3 ) ) ) ).

tff('EQ-not',axiom,
    ! [VPred0: vPred,VPred1: vPred] :
      ( ( vnot(VPred0) = vnot(VPred1) )
     => ( VPred0 = VPred1 ) ) ).

tff('EQ-eq',axiom,
    ! [VExp0: vExp,VExp1: vExp,VExp2: vExp,VExp3: vExp] :
      ( ( veq(VExp0,VExp1) = veq(VExp2,VExp3) )
     => ( ( VExp0 = VExp2 )
        & ( VExp1 = VExp3 ) ) ) ).

tff('EQ-gt',axiom,
    ! [VExp0: vExp,VExp1: vExp,VExp2: vExp,VExp3: vExp] :
      ( ( vgt(VExp0,VExp1) = vgt(VExp2,VExp3) )
     => ( ( VExp0 = VExp2 )
        & ( VExp1 = VExp3 ) ) ) ).

tff('EQ-lt',axiom,
    ! [VExp0: vExp,VExp1: vExp,VExp2: vExp,VExp3: vExp] :
      ( ( vlt(VExp0,VExp1) = vlt(VExp2,VExp3) )
     => ( ( VExp0 = VExp2 )
        & ( VExp1 = VExp3 ) ) ) ).

tff('DIFF-ptrue-and',axiom,
    ! [VPred0: vPred,VPred1: vPred] : ( vptrue != vand(VPred0,VPred1) ) ).

tff('DIFF-ptrue-not',axiom,
    ! [VPred0: vPred] : ( vptrue != vnot(VPred0) ) ).

tff('DIFF-ptrue-eq',axiom,
    ! [VExp0: vExp,VExp1: vExp] : ( vptrue != veq(VExp0,VExp1) ) ).

tff('DIFF-ptrue-gt',axiom,
    ! [VExp0: vExp,VExp1: vExp] : ( vptrue != vgt(VExp0,VExp1) ) ).

tff('DIFF-ptrue-lt',axiom,
    ! [VExp0: vExp,VExp1: vExp] : ( vptrue != vlt(VExp0,VExp1) ) ).

tff('DIFF-and-not',axiom,
    ! [VPred0: vPred,VPred1: vPred,VPred2: vPred] : ( vand(VPred0,VPred1) != vnot(VPred2) ) ).

tff('DIFF-and-eq',axiom,
    ! [VPred0: vPred,VPred1: vPred,VExp0: vExp,VExp1: vExp] : ( vand(VPred0,VPred1) != veq(VExp0,VExp1) ) ).

tff('DIFF-and-gt',axiom,
    ! [VPred0: vPred,VPred1: vPred,VExp0: vExp,VExp1: vExp] : ( vand(VPred0,VPred1) != vgt(VExp0,VExp1) ) ).

tff('DIFF-and-lt',axiom,
    ! [VPred0: vPred,VPred1: vPred,VExp0: vExp,VExp1: vExp] : ( vand(VPred0,VPred1) != vlt(VExp0,VExp1) ) ).

tff('DIFF-not-eq',axiom,
    ! [VPred0: vPred,VExp0: vExp,VExp1: vExp] : ( vnot(VPred0) != veq(VExp0,VExp1) ) ).

tff('DIFF-not-gt',axiom,
    ! [VPred0: vPred,VExp0: vExp,VExp1: vExp] : ( vnot(VPred0) != vgt(VExp0,VExp1) ) ).

tff('DIFF-not-lt',axiom,
    ! [VPred0: vPred,VExp0: vExp,VExp1: vExp] : ( vnot(VPred0) != vlt(VExp0,VExp1) ) ).

tff('DIFF-eq-gt',axiom,
    ! [VExp0: vExp,VExp1: vExp,VExp2: vExp,VExp3: vExp] : ( veq(VExp0,VExp1) != vgt(VExp2,VExp3) ) ).

tff('DIFF-eq-lt',axiom,
    ! [VExp0: vExp,VExp1: vExp,VExp2: vExp,VExp3: vExp] : ( veq(VExp0,VExp1) != vlt(VExp2,VExp3) ) ).

tff('DIFF-gt-lt',axiom,
    ! [VExp0: vExp,VExp1: vExp,VExp2: vExp,VExp3: vExp] : ( vgt(VExp0,VExp1) != vlt(VExp2,VExp3) ) ).

tff('dom-TStore',axiom,
    ! [VX: vTStore] :
      ( ( VX = vemptyStore )
      | ? [VName0: vName,VTable0: vTable,VTStore0: vTStore] : ( VX = vbindStore(VName0,VTable0,VTStore0) ) ) ).

tff('EQ-bindStore',axiom,
    ! [VTable1: vTable,VName1: vName,VTStore1: vTStore,VName0: vName,VTStore0: vTStore,VTable0: vTable] :
      ( ( vbindStore(VName0,VTable0,VTStore0) = vbindStore(VName1,VTable1,VTStore1) )
     => ( ( VName0 = VName1 )
        & ( VTable0 = VTable1 )
        & ( VTStore0 = VTStore1 ) ) ) ).

tff('DIFF-emptyStore-bindStore',axiom,
    ! [VName0: vName,VTable0: vTable,VTStore0: vTStore] : ( vemptyStore != vbindStore(VName0,VTable0,VTStore0) ) ).

tff('EQ-enumVal',axiom,
    ! [VVal0: vVal,VVal1: vVal] :
      ( ( venumVal(VVal0) = venumVal(VVal1) )
     => ( VVal0 = VVal1 ) ) ).

tff('DIFF-initVal-enumVal',axiom,
    ! [VVal0: vVal] : ( vinitVal != venumVal(VVal0) ) ).

tff('dom-OptFType',axiom,
    ! [VX: vOptFType] :
      ( ( VX = vnoFType )
      | ? [VFType0: vFType] : ( VX = vsomeFType(VFType0) ) ) ).

tff('EQ-someFType',axiom,
    ! [VFType0: vFType,VFType1: vFType] :
      ( ( vsomeFType(VFType0) = vsomeFType(VFType1) )
     => ( VFType0 = VFType1 ) ) ).

tff('DIFF-noFType-someFType',axiom,
    ! [VFType0: vFType] : ( vnoFType != vsomeFType(VFType0) ) ).

tff('dom-AttrL',axiom,
    ! [VX: vAttrL] :
      ( ( VX = vaempty )
      | ? [VName0: vName,VAttrL0: vAttrL] : ( VX = vacons(VName0,VAttrL0) ) ) ).

tff('EQ-acons',axiom,
    ! [VName0: vName,VAttrL0: vAttrL,VName1: vName,VAttrL1: vAttrL] :
      ( ( vacons(VName0,VAttrL0) = vacons(VName1,VAttrL1) )
     => ( ( VName0 = VName1 )
        & ( VAttrL0 = VAttrL1 ) ) ) ).

tff('DIFF-aempty-acons',axiom,
    ! [VName0: vName,VAttrL0: vAttrL] : ( vaempty != vacons(VName0,VAttrL0) ) ).

tff('getRawTable-0',axiom,
    ! [Vrt: vRawTable] : ( vgetRawTable(vsomeRawTable(Vrt)) = Vrt ) ).

tff('getTable-0',axiom,
    ! [Vt: vTable] : ( vgetTable(vsomeTable(Vt)) = Vt ) ).

tff('getTType-0',axiom,
    ! [Vtt: vTType] : ( vgetTType(vsomeTType(Vtt)) = Vtt ) ).

tff('getQuery-0',axiom,
    ! [Vq: vQuery] : ( vgetQuery(vsomeQuery(Vq)) = Vq ) ).

tff('getVal-0',axiom,
    ! [Vv: vVal] : ( vgetVal(vsomeVal(Vv)) = Vv ) ).

tff('getFType-0',axiom,
    ! [Va: vFType] : ( vgetFType(vsomeFType(Va)) = Va ) ).

tff('append-0',axiom,
    ! [Vatl: vAttrL] : ( vappend(vaempty,Vatl) = Vatl ) ).

tff('append-1',axiom,
    ! [Vname: vName,Vatlr: vAttrL,Vatl: vAttrL] : ( vappend(vacons(Vname,Vatlr),Vatl) = vacons(Vname,vappend(Vatlr,Vatl)) ) ).

tff('append-INV',axiom,
    ! [VAttrL0: vAttrL,VAttrL1: vAttrL] :
      ( ? [Vatl0: vAttrL] :
          ( ( VAttrL0 = vaempty )
          & ( VAttrL1 = Vatl0 )
          & ( vappend(VAttrL0,VAttrL1) = Vatl0 ) )
      | ? [Vname0: vName,Vatlr0: vAttrL,Vatl1: vAttrL] :
          ( ( VAttrL0 = vacons(Vname0,Vatlr0) )
          & ( VAttrL1 = Vatl1 )
          & ( vappend(VAttrL0,VAttrL1) = vacons(Vname0,vappend(Vatlr0,Vatl1)) ) ) ) ).

tff('getRaw-0',axiom,
    ! [VwildcardName0: vAttrL,Vrt: vRawTable] : ( vgetRaw(vtable(VwildcardName0,Vrt)) = Vrt ) ).

tff('getRaw-INV',axiom,
    ! [VTable0: vTable] :
    ? [VwildcardName00: vAttrL,Vrt0: vRawTable] :
      ( ( VTable0 = vtable(VwildcardName00,Vrt0) )
      & ( vgetRaw(VTable0) = Vrt0 ) ) ).

tff('getAttrL-0',axiom,
    ! [Val: vAttrL,VwildcardName0: vRawTable] : ( vgetAttrL(vtable(Val,VwildcardName0)) = Val ) ).

tff('getAttrL-INV',axiom,
    ! [VTable0: vTable] :
    ? [Val0: vAttrL,VwildcardName00: vRawTable] :
      ( ( VTable0 = vtable(Val0,VwildcardName00) )
      & ( vgetAttrL(VTable0) = Val0 ) ) ).

tff('matchingAttrL-0',axiom,
    vmatchingAttrL(vttempty,vaempty) ).

tff('matchingAttrL-1',axiom,
    ! [Vttr: vTType,Va1: vName,VwildcardName0: vFType,Va2: vName,Val: vAttrL] :
      ( vmatchingAttrL(vttcons(Va1,VwildcardName0,Vttr),vacons(Va2,Val))
    <=> ( ( Va1 = Va2 )
        & vmatchingAttrL(Vttr,Val) ) ) ).

tff('matchingAttrL-2',axiom,
    ! [VwildcardName0: vTType,VwildcardName1: vAttrL] :
      ( ( ( ( VwildcardName0 != vttempty )
          | ( VwildcardName1 != vaempty ) )
        & ( ! [Va10: vName,VwildcardName00: vFType,Vttr0: vTType] : ( VwildcardName0 != vttcons(Va10,VwildcardName00,Vttr0) )
          | ! [Va20: vName,Val0: vAttrL] : ( VwildcardName1 != vacons(Va20,Val0) ) ) )
     => ~ vmatchingAttrL(VwildcardName0,VwildcardName1) ) ).

tff('matchingAttrL-true-INV',axiom,
    ! [VTType0: vTType,VAttrL0: vAttrL] :
      ( vmatchingAttrL(VTType0,VAttrL0)
     => ( ( ( VTType0 = vttempty )
          & ( VAttrL0 = vaempty ) )
        | ? [Vttr: vTType,Va1: vName,VwildcardName0: vFType,Va2: vName,Val: vAttrL] :
            ( ( VTType0 = vttcons(Va1,VwildcardName0,Vttr) )
            & ( VAttrL0 = vacons(Va2,Val) )
            & ( Va1 = Va2 )
            & vmatchingAttrL(Vttr,Val) ) ) ) ).

tff('matchingAttrL-false-INV',axiom,
    ! [VTType0: vTType,VAttrL0: vAttrL] :
      ( ~ vmatchingAttrL(VTType0,VAttrL0)
     => ( ? [Vttr: vTType,Va1: vName,VwildcardName0: vFType,Va2: vName,Val: vAttrL] :
            ( ( VTType0 = vttcons(Va1,VwildcardName0,Vttr) )
            & ( VAttrL0 = vacons(Va2,Val) )
            & ~ ( ( Va1 = Va2 )
                & vmatchingAttrL(Vttr,Val) ) )
        | ? [VwildcardName0: vTType,VwildcardName1: vAttrL] :
            ( ( ( VwildcardName0 != vttempty )
              | ( VwildcardName1 != vaempty ) )
            & ( ! [Va10: vName,VwildcardName00: vFType,Vttr0: vTType] : ( VwildcardName0 != vttcons(Va10,VwildcardName00,Vttr0) )
              | ! [Va20: vName,Val0: vAttrL] : ( VwildcardName1 != vacons(Va20,Val0) ) )
            & ( VTType0 = VwildcardName0 )
            & ( VAttrL0 = VwildcardName1 ) ) ) ) ).

tff('welltypedRow-0',axiom,
    vwelltypedRow(vttempty,vrempty) ).

tff('welltypedRow-1',axiom,
    ! [Vv: vVal,Vttr: vTType,Vft: vFType,VwildcardName0: vName,Vr: vRow] :
      ( vwelltypedRow(vttcons(VwildcardName0,Vft,Vttr),vrcons(Vv,Vr))
    <=> ( ( vfieldType(Vv) = Vft )
        & vwelltypedRow(Vttr,Vr) ) ) ).

tff('welltypedRow-2',axiom,
    ! [VwildcardName0: vTType,VwildcardName1: vRow] :
      ( ( ( ( VwildcardName0 != vttempty )
          | ( VwildcardName1 != vrempty ) )
        & ( ! [VwildcardName00: vName,Vft0: vFType,Vttr0: vTType] : ( VwildcardName0 != vttcons(VwildcardName00,Vft0,Vttr0) )
          | ! [Vv0: vVal,Vr0: vRow] : ( VwildcardName1 != vrcons(Vv0,Vr0) ) ) )
     => ~ vwelltypedRow(VwildcardName0,VwildcardName1) ) ).

tff('welltypedRow-true-INV',axiom,
    ! [VTType0: vTType,VRow0: vRow] :
      ( vwelltypedRow(VTType0,VRow0)
     => ( ( ( VTType0 = vttempty )
          & ( VRow0 = vrempty ) )
        | ? [Vv: vVal,Vttr: vTType,Vft: vFType,VwildcardName0: vName,Vr: vRow] :
            ( ( VTType0 = vttcons(VwildcardName0,Vft,Vttr) )
            & ( VRow0 = vrcons(Vv,Vr) )
            & ( vfieldType(Vv) = Vft )
            & vwelltypedRow(Vttr,Vr) ) ) ) ).

tff('welltypedRow-false-INV',axiom,
    ! [VTType0: vTType,VRow0: vRow] :
      ( ~ vwelltypedRow(VTType0,VRow0)
     => ( ? [Vv: vVal,Vttr: vTType,Vft: vFType,VwildcardName0: vName,Vr: vRow] :
            ( ( VTType0 = vttcons(VwildcardName0,Vft,Vttr) )
            & ( VRow0 = vrcons(Vv,Vr) )
            & ~ ( ( vfieldType(Vv) = Vft )
                & vwelltypedRow(Vttr,Vr) ) )
        | ? [VwildcardName0: vTType,VwildcardName1: vRow] :
            ( ( ( VwildcardName0 != vttempty )
              | ( VwildcardName1 != vrempty ) )
            & ( ! [VwildcardName00: vName,Vft0: vFType,Vttr0: vTType] : ( VwildcardName0 != vttcons(VwildcardName00,Vft0,Vttr0) )
              | ! [Vv0: vVal,Vr0: vRow] : ( VwildcardName1 != vrcons(Vv0,Vr0) ) )
            & ( VTType0 = VwildcardName0 )
            & ( VRow0 = VwildcardName1 ) ) ) ) ).

tff('welltypedRawtable-0',axiom,
    ! [VwildcardName0: vTType] : vwelltypedRawtable(VwildcardName0,vtempty) ).

tff('welltypedRawtable-1',axiom,
    ! [Vtt: vTType,Vr: vRow,Vt1: vRawTable] :
      ( vwelltypedRawtable(Vtt,vtcons(Vr,Vt1))
    <=> ( vwelltypedRow(Vtt,Vr)
        & vwelltypedRawtable(Vtt,Vt1) ) ) ).

tff('welltypedRawtable-true-INV',axiom,
    ! [VTType0: vTType,VRawTable0: vRawTable] :
      ( vwelltypedRawtable(VTType0,VRawTable0)
     => ( ? [VwildcardName0: vTType] :
            ( ( VTType0 = VwildcardName0 )
            & ( VRawTable0 = vtempty ) )
        | ? [Vr: vRow,Vt1: vRawTable,Vtt: vTType] :
            ( ( VTType0 = Vtt )
            & ( VRawTable0 = vtcons(Vr,Vt1) )
            & vwelltypedRow(Vtt,Vr)
            & vwelltypedRawtable(Vtt,Vt1) ) ) ) ).

tff('welltypedRawtable-false-INV',axiom,
    ! [VTType0: vTType,VRawTable0: vRawTable] :
      ( ~ vwelltypedRawtable(VTType0,VRawTable0)
     => ? [Vr: vRow,Vt1: vRawTable,Vtt: vTType] :
          ( ( VTType0 = Vtt )
          & ( VRawTable0 = vtcons(Vr,Vt1) )
          & ~ ( vwelltypedRow(Vtt,Vr)
              & vwelltypedRawtable(Vtt,Vt1) ) ) ) ).

tff('welltypedtable-0',axiom,
    ! [Vtt: vTType,Val: vAttrL,Vt1: vRawTable] :
      ( vwelltypedtable(Vtt,vtable(Val,Vt1))
    <=> ( vmatchingAttrL(Vtt,Val)
        & vwelltypedRawtable(Vtt,Vt1) ) ) ).

tff('welltypedtable-true-INV',axiom,
    ! [VTType0: vTType,VTable0: vTable] :
      ( vwelltypedtable(VTType0,VTable0)
     => ? [Vtt: vTType,Val: vAttrL,Vt1: vRawTable] :
          ( ( VTType0 = Vtt )
          & ( VTable0 = vtable(Val,Vt1) )
          & vmatchingAttrL(Vtt,Val)
          & vwelltypedRawtable(Vtt,Vt1) ) ) ).

tff('welltypedtable-false-INV',axiom,
    ! [VTType0: vTType,VTable0: vTable] :
      ( ~ vwelltypedtable(VTType0,VTable0)
     => ? [Vtt: vTType,Val: vAttrL,Vt1: vRawTable] :
          ( ( VTType0 = Vtt )
          & ( VTable0 = vtable(Val,Vt1) )
          & ~ ( vmatchingAttrL(Vtt,Val)
              & vwelltypedRawtable(Vtt,Vt1) ) ) ) ).

tff('rowIn-0',axiom,
    ! [VwildcardName0: vRow] : ~ vrowIn(VwildcardName0,vtempty) ).

tff('rowIn-1',axiom,
    ! [Vr1: vRow,Vr2: vRow,Vrt2: vRawTable] :
      ( vrowIn(Vr1,vtcons(Vr2,Vrt2))
    <=> ( ( Vr1 = Vr2 )
        | vrowIn(Vr1,Vrt2) ) ) ).

tff('rowIn-true-INV',axiom,
    ! [VRow0: vRow,VRawTable0: vRawTable] :
      ( vrowIn(VRow0,VRawTable0)
     => ? [Vr2: vRow,Vrt2: vRawTable,Vr1: vRow] :
          ( ( VRow0 = Vr1 )
          & ( VRawTable0 = vtcons(Vr2,Vrt2) )
          & ( ( Vr1 = Vr2 )
            | vrowIn(Vr1,Vrt2) ) ) ) ).

tff('rowIn-false-INV',axiom,
    ! [VRow0: vRow,VRawTable0: vRawTable] :
      ( ~ vrowIn(VRow0,VRawTable0)
     => ( ? [VwildcardName0: vRow] :
            ( ( VRow0 = VwildcardName0 )
            & ( VRawTable0 = vtempty ) )
        | ? [Vr2: vRow,Vrt2: vRawTable,Vr1: vRow] :
            ( ( VRow0 = Vr1 )
            & ( VRawTable0 = vtcons(Vr2,Vrt2) )
            & ~ ( ( Vr1 = Vr2 )
                | vrowIn(Vr1,Vrt2) ) ) ) ) ).

tff('projectFirstRaw-0',axiom,
    vprojectFirstRaw(vtempty) = vtempty ).

tff('projectFirstRaw-1',axiom,
    ! [Vrt1: vRawTable] : ( vprojectFirstRaw(vtcons(vrempty,Vrt1)) = vtcons(vrempty,vprojectFirstRaw(Vrt1)) ) ).

tff('projectFirstRaw-2',axiom,
    ! [Vf: vVal,VwildcardName0: vRow,Vrt1: vRawTable] : ( vprojectFirstRaw(vtcons(vrcons(Vf,VwildcardName0),Vrt1)) = vtcons(vrcons(Vf,vrempty),vprojectFirstRaw(Vrt1)) ) ).

tff('projectFirstRaw-INV',axiom,
    ! [VRawTable0: vRawTable] :
      ( ( ( VRawTable0 = vtempty )
        & ( vprojectFirstRaw(VRawTable0) = vtempty ) )
      | ? [Vrt10: vRawTable] :
          ( ( VRawTable0 = vtcons(vrempty,Vrt10) )
          & ( vprojectFirstRaw(VRawTable0) = vtcons(vrempty,vprojectFirstRaw(Vrt10)) ) )
      | ? [Vf0: vVal,VwildcardName00: vRow,Vrt11: vRawTable] :
          ( ( VRawTable0 = vtcons(vrcons(Vf0,VwildcardName00),Vrt11) )
          & ( vprojectFirstRaw(VRawTable0) = vtcons(vrcons(Vf0,vrempty),vprojectFirstRaw(Vrt11)) ) ) ) ).

tff('dropFirstColRaw-0',axiom,
    vdropFirstColRaw(vtempty) = vtempty ).

tff('dropFirstColRaw-1',axiom,
    ! [Vrt1: vRawTable] : ( vdropFirstColRaw(vtcons(vrempty,Vrt1)) = vtcons(vrempty,vdropFirstColRaw(Vrt1)) ) ).

tff('dropFirstColRaw-2',axiom,
    ! [VwildcardName0: vVal,Vrr: vRow,Vrt1: vRawTable] : ( vdropFirstColRaw(vtcons(vrcons(VwildcardName0,Vrr),Vrt1)) = vtcons(Vrr,vdropFirstColRaw(Vrt1)) ) ).

tff('dropFirstColRaw-INV',axiom,
    ! [VRawTable0: vRawTable] :
      ( ( ( VRawTable0 = vtempty )
        & ( vdropFirstColRaw(VRawTable0) = vtempty ) )
      | ? [Vrt10: vRawTable] :
          ( ( VRawTable0 = vtcons(vrempty,Vrt10) )
          & ( vdropFirstColRaw(VRawTable0) = vtcons(vrempty,vdropFirstColRaw(Vrt10)) ) )
      | ? [VwildcardName00: vVal,Vrr0: vRow,Vrt11: vRawTable] :
          ( ( VRawTable0 = vtcons(vrcons(VwildcardName00,Vrr0),Vrt11) )
          & ( vdropFirstColRaw(VRawTable0) = vtcons(Vrr0,vdropFirstColRaw(Vrt11)) ) ) ) ).

tff('isSomeRawTable-0',axiom,
    ~ visSomeRawTable(vnoRawTable) ).

tff('isSomeRawTable-1',axiom,
    ! [VwildcardName0: vRawTable] : visSomeRawTable(vsomeRawTable(VwildcardName0)) ).

tff('isSomeRawTable-true-INV',axiom,
    ! [VOptRawTable0: vOptRawTable] :
      ( visSomeRawTable(VOptRawTable0)
     => ? [VwildcardName0: vRawTable] : ( VOptRawTable0 = vsomeRawTable(VwildcardName0) ) ) ).

tff('isSomeRawTable-false-INV',axiom,
    ! [VOptRawTable0: vOptRawTable] :
      ( ~ visSomeRawTable(VOptRawTable0)
     => ( VOptRawTable0 = vnoRawTable ) ) ).

tff('sameLength-0',axiom,
    vsameLength(vtempty,vtempty) ).

tff('sameLength-1',axiom,
    ! [VwildcardName0: vRow,Vtll: vRawTable,VwildcardName1: vRow,Vtlr: vRawTable] :
      ( vsameLength(vtcons(VwildcardName0,Vtll),vtcons(VwildcardName1,Vtlr))
    <=> vsameLength(Vtll,Vtlr) ) ).

tff('sameLength-2',axiom,
    ! [VwildcardName0: vRawTable,VwildcardName1: vRawTable] :
      ( ( ( ( VwildcardName0 != vtempty )
          | ( VwildcardName1 != vtempty ) )
        & ( ! [VwildcardName00: vRow,Vtll0: vRawTable] : ( VwildcardName0 != vtcons(VwildcardName00,Vtll0) )
          | ! [VwildcardName10: vRow,Vtlr0: vRawTable] : ( VwildcardName1 != vtcons(VwildcardName10,Vtlr0) ) ) )
     => ~ vsameLength(VwildcardName0,VwildcardName1) ) ).

tff('sameLength-true-INV',axiom,
    ! [VRawTable0: vRawTable,VRawTable1: vRawTable] :
      ( vsameLength(VRawTable0,VRawTable1)
     => ( ( ( VRawTable0 = vtempty )
          & ( VRawTable1 = vtempty ) )
        | ? [VwildcardName0: vRow,Vtll: vRawTable,VwildcardName1: vRow,Vtlr: vRawTable] :
            ( ( VRawTable0 = vtcons(VwildcardName0,Vtll) )
            & ( VRawTable1 = vtcons(VwildcardName1,Vtlr) )
            & vsameLength(Vtll,Vtlr) ) ) ) ).

tff('sameLength-false-INV',axiom,
    ! [VRawTable0: vRawTable,VRawTable1: vRawTable] :
      ( ~ vsameLength(VRawTable0,VRawTable1)
     => ( ? [VwildcardName0: vRow,Vtll: vRawTable,VwildcardName1: vRow,Vtlr: vRawTable] :
            ( ( VRawTable0 = vtcons(VwildcardName0,Vtll) )
            & ( VRawTable1 = vtcons(VwildcardName1,Vtlr) )
            & ~ vsameLength(Vtll,Vtlr) )
        | ? [VwildcardName0: vRawTable,VwildcardName1: vRawTable] :
            ( ( ( VwildcardName0 != vtempty )
              | ( VwildcardName1 != vtempty ) )
            & ( ! [VwildcardName00: vRow,Vtll0: vRawTable] : ( VwildcardName0 != vtcons(VwildcardName00,Vtll0) )
              | ! [VwildcardName10: vRow,Vtlr0: vRawTable] : ( VwildcardName1 != vtcons(VwildcardName10,Vtlr0) ) )
            & ( VRawTable0 = VwildcardName0 )
            & ( VRawTable1 = VwildcardName1 ) ) ) ) ).

tff('attachColToFrontRaw-0',axiom,
    vattachColToFrontRaw(vtempty,vtempty) = vtempty ).

tff('attachColToFrontRaw-1',axiom,
    ! [Vf: vVal,Vrt1r: vRawTable,Vr: vRow,Vrt2r: vRawTable] : ( vattachColToFrontRaw(vtcons(vrcons(Vf,vrempty),Vrt1r),vtcons(Vr,Vrt2r)) = vtcons(vrcons(Vf,Vr),vattachColToFrontRaw(Vrt1r,Vrt2r)) ) ).

tff('attachColToFrontRaw-2',axiom,
    ! [VwildcardName0: vRawTable,VwildcardName1: vRawTable] :
      ( ( ( ( VwildcardName0 != vtempty )
          | ( VwildcardName1 != vtempty ) )
        & ( ! [Vf0: vVal,Vrt1r0: vRawTable] : ( VwildcardName0 != vtcons(vrcons(Vf0,vrempty),Vrt1r0) )
          | ! [Vr0: vRow,Vrt2r0: vRawTable] : ( VwildcardName1 != vtcons(Vr0,Vrt2r0) ) ) )
     => ( vattachColToFrontRaw(VwildcardName0,VwildcardName1) = vtcons(vrempty,vtempty) ) ) ).

tff('attachColToFrontRaw-INV',axiom,
    ! [VRawTable0: vRawTable,VRawTable1: vRawTable] :
      ( ( ( VRawTable0 = vtempty )
        & ( VRawTable1 = vtempty )
        & ( vattachColToFrontRaw(VRawTable0,VRawTable1) = vtempty ) )
      | ? [Vf0: vVal,Vrt1r0: vRawTable,Vr0: vRow,Vrt2r0: vRawTable] :
          ( ( VRawTable0 = vtcons(vrcons(Vf0,vrempty),Vrt1r0) )
          & ( VRawTable1 = vtcons(Vr0,Vrt2r0) )
          & ( vattachColToFrontRaw(VRawTable0,VRawTable1) = vtcons(vrcons(Vf0,Vr0),vattachColToFrontRaw(Vrt1r0,Vrt2r0)) ) )
      | ? [VwildcardName00: vRawTable,VwildcardName10: vRawTable] :
          ( ( ( VwildcardName00 != vtempty )
            | ( VwildcardName10 != vtempty ) )
          & ( ! [Vf000: vVal,Vrt1r000: vRawTable] : ( VwildcardName00 != vtcons(vrcons(Vf000,vrempty),Vrt1r000) )
            | ! [Vr000: vRow,Vrt2r000: vRawTable] : ( VwildcardName10 != vtcons(Vr000,Vrt2r000) ) )
          & ( VRawTable0 = VwildcardName00 )
          & ( VRawTable1 = VwildcardName10 )
          & ( vattachColToFrontRaw(VRawTable0,VRawTable1) = vtcons(vrempty,vtempty) ) ) ) ).

tff('rawUnion-0',axiom,
    ! [Vrt: vRawTable] : ( vrawUnion(vtempty,Vrt) = Vrt ) ).

tff('rawUnion-1',axiom,
    ! [Vr: vRow,Vrt1: vRawTable,Vrtr: vRawTable] :
      ( ~ vrowIn(Vr,Vrt1)
     => ( vrawUnion(vtcons(Vr,Vrtr),Vrt1) = vtcons(Vr,vrawUnion(Vrtr,Vrt1)) ) ) ).

tff('rawUnion-2',axiom,
    ! [Vr: vRow,Vrt1: vRawTable,Vrtr: vRawTable] :
      ( vrowIn(Vr,Vrt1)
     => ( vrawUnion(vtcons(Vr,Vrtr),Vrt1) = vrawUnion(Vrtr,Vrt1) ) ) ).

tff('rawUnion-INV',axiom,
    ! [VRawTable0: vRawTable,VRawTable1: vRawTable] :
      ( ? [Vrt0: vRawTable] :
          ( ( VRawTable0 = vtempty )
          & ( VRawTable1 = Vrt0 )
          & ( vrawUnion(VRawTable0,VRawTable1) = Vrt0 ) )
      | ? [Vr0: vRow,Vrtr0: vRawTable,Vurt1rt20: vRawTable,Vrt10: vRawTable] :
          ( ( Vurt1rt20 = vrawUnion(Vrtr0,Vrt10) )
          & ~ vrowIn(Vr0,Vrt10)
          & ( VRawTable0 = vtcons(Vr0,Vrtr0) )
          & ( VRawTable1 = Vrt10 )
          & ( vrawUnion(VRawTable0,VRawTable1) = vtcons(Vr0,Vurt1rt20) ) )
      | ? [Vr1: vRow,Vrtr1: vRawTable,Vurt1rt21: vRawTable,Vrt11: vRawTable] :
          ( ( Vurt1rt21 = vrawUnion(Vrtr1,Vrt11) )
          & vrowIn(Vr1,Vrt11)
          & ( VRawTable0 = vtcons(Vr1,Vrtr1) )
          & ( VRawTable1 = Vrt11 )
          & ( vrawUnion(VRawTable0,VRawTable1) = Vurt1rt21 ) ) ) ).

tff('rawIntersection-0',axiom,
    ! [VwildcardName0: vRawTable] : ( vrawIntersection(vtempty,VwildcardName0) = vtempty ) ).

tff('rawIntersection-1',axiom,
    ! [Vr: vRow,Vrt1: vRawTable] :
      ( vrowIn(Vr,Vrt1)
     => ( vrawIntersection(vtcons(Vr,vtempty),Vrt1) = vtcons(Vr,vtempty) ) ) ).

tff('rawIntersection-2',axiom,
    ! [Vr: vRow,Vrt1: vRawTable] :
      ( ~ vrowIn(Vr,Vrt1)
     => ( vrawIntersection(vtcons(Vr,vtempty),Vrt1) = vtempty ) ) ).

tff('rawIntersection-3',axiom,
    ! [Vr: vRow,Vrtr: vRawTable,Vrt1: vRawTable] :
      ( ( ! [Vr00: vRow] :
            ( ( Vr != Vr00 )
            | ( Vrtr != vtempty ) )
        & vrowIn(Vr,Vrt1) )
     => ( vrawIntersection(vtcons(Vr,Vrtr),Vrt1) = vtcons(Vr,vrawIntersection(Vrtr,Vrt1)) ) ) ).

tff('rawIntersection-4',axiom,
    ! [Vr: vRow,Vrtr: vRawTable,Vrt1: vRawTable] :
      ( ( ! [Vr00: vRow] :
            ( ( Vr != Vr00 )
            | ( Vrtr != vtempty ) )
        & ~ vrowIn(Vr,Vrt1) )
     => ( vrawIntersection(vtcons(Vr,Vrtr),Vrt1) = vrawIntersection(Vrtr,Vrt1) ) ) ).

tff('rawIntersection-INV',axiom,
    ! [VRawTable0: vRawTable,VRawTable1: vRawTable] :
      ( ? [VwildcardName00: vRawTable] :
          ( ( VRawTable0 = vtempty )
          & ( VRawTable1 = VwildcardName00 )
          & ( vrawIntersection(VRawTable0,VRawTable1) = vtempty ) )
      | ? [Vr0: vRow,Vrt10: vRawTable] :
          ( vrowIn(Vr0,Vrt10)
          & ( VRawTable0 = vtcons(Vr0,vtempty) )
          & ( VRawTable1 = Vrt10 )
          & ( vrawIntersection(VRawTable0,VRawTable1) = vtcons(Vr0,vtempty) ) )
      | ? [Vr1: vRow,Vrt11: vRawTable] :
          ( ~ vrowIn(Vr1,Vrt11)
          & ( VRawTable0 = vtcons(Vr1,vtempty) )
          & ( VRawTable1 = Vrt11 )
          & ( vrawIntersection(VRawTable0,VRawTable1) = vtempty ) )
      | ? [Vr2: vRow,Vrtr0: vRawTable,Virt1rt20: vRawTable,Vrt12: vRawTable] :
          ( ! [Vr000: vRow] :
              ( ( Vr2 != Vr000 )
              | ( Vrtr0 != vtempty ) )
          & ( Virt1rt20 = vrawIntersection(Vrtr0,Vrt12) )
          & vrowIn(Vr2,Vrt12)
          & ( VRawTable0 = vtcons(Vr2,Vrtr0) )
          & ( VRawTable1 = Vrt12 )
          & ( vrawIntersection(VRawTable0,VRawTable1) = vtcons(Vr2,Virt1rt20) ) )
      | ? [Vr3: vRow,Vrtr1: vRawTable,Virt1rt21: vRawTable,Vrt13: vRawTable] :
          ( ! [Vr010: vRow] :
              ( ( Vr3 != Vr010 )
              | ( Vrtr1 != vtempty ) )
          & ( Virt1rt21 = vrawIntersection(Vrtr1,Vrt13) )
          & ~ vrowIn(Vr3,Vrt13)
          & ( VRawTable0 = vtcons(Vr3,Vrtr1) )
          & ( VRawTable1 = Vrt13 )
          & ( vrawIntersection(VRawTable0,VRawTable1) = Virt1rt21 ) ) ) ).

tff('rawDifference-0',axiom,
    ! [VwildcardName0: vRawTable] : ( vrawDifference(vtempty,VwildcardName0) = vtempty ) ).

tff('rawDifference-1',axiom,
    ! [Vr: vRow,Vrt2: vRawTable] :
      ( ~ vrowIn(Vr,Vrt2)
     => ( vrawDifference(vtcons(Vr,vtempty),Vrt2) = vtcons(Vr,vtempty) ) ) ).

tff('rawDifference-2',axiom,
    ! [Vr: vRow,Vrt2: vRawTable] :
      ( vrowIn(Vr,Vrt2)
     => ( vrawDifference(vtcons(Vr,vtempty),Vrt2) = vtempty ) ) ).

tff('rawDifference-3',axiom,
    ! [Vr: vRow,Vrtr: vRawTable,Vrt2: vRawTable] :
      ( ( ! [Vr00: vRow] :
            ( ( Vr != Vr00 )
            | ( Vrtr != vtempty ) )
        & ~ vrowIn(Vr,Vrt2) )
     => ( vrawDifference(vtcons(Vr,Vrtr),Vrt2) = vtcons(Vr,vrawDifference(Vrtr,Vrt2)) ) ) ).

tff('rawDifference-4',axiom,
    ! [Vr: vRow,Vrtr: vRawTable,Vrt2: vRawTable] :
      ( ( ! [Vr00: vRow] :
            ( ( Vr != Vr00 )
            | ( Vrtr != vtempty ) )
        & vrowIn(Vr,Vrt2) )
     => ( vrawDifference(vtcons(Vr,Vrtr),Vrt2) = vrawDifference(Vrtr,Vrt2) ) ) ).

tff('rawDifference-INV',axiom,
    ! [VRawTable0: vRawTable,VRawTable1: vRawTable] :
      ( ? [VwildcardName00: vRawTable] :
          ( ( VRawTable0 = vtempty )
          & ( VRawTable1 = VwildcardName00 )
          & ( vrawDifference(VRawTable0,VRawTable1) = vtempty ) )
      | ? [Vr0: vRow,Vrt20: vRawTable] :
          ( ~ vrowIn(Vr0,Vrt20)
          & ( VRawTable0 = vtcons(Vr0,vtempty) )
          & ( VRawTable1 = Vrt20 )
          & ( vrawDifference(VRawTable0,VRawTable1) = vtcons(Vr0,vtempty) ) )
      | ? [Vr1: vRow,Vrt21: vRawTable] :
          ( vrowIn(Vr1,Vrt21)
          & ( VRawTable0 = vtcons(Vr1,vtempty) )
          & ( VRawTable1 = Vrt21 )
          & ( vrawDifference(VRawTable0,VRawTable1) = vtempty ) )
      | ? [Vr2: vRow,Vrtr0: vRawTable,Vdrt1rt20: vRawTable,Vrt22: vRawTable] :
          ( ! [Vr000: vRow] :
              ( ( Vr2 != Vr000 )
              | ( Vrtr0 != vtempty ) )
          & ( Vdrt1rt20 = vrawDifference(Vrtr0,Vrt22) )
          & ~ vrowIn(Vr2,Vrt22)
          & ( VRawTable0 = vtcons(Vr2,Vrtr0) )
          & ( VRawTable1 = Vrt22 )
          & ( vrawDifference(VRawTable0,VRawTable1) = vtcons(Vr2,Vdrt1rt20) ) )
      | ? [Vr3: vRow,Vrtr1: vRawTable,Vdrt1rt21: vRawTable,Vrt23: vRawTable] :
          ( ! [Vr010: vRow] :
              ( ( Vr3 != Vr010 )
              | ( Vrtr1 != vtempty ) )
          & ( Vdrt1rt21 = vrawDifference(Vrtr1,Vrt23) )
          & vrowIn(Vr3,Vrt23)
          & ( VRawTable0 = vtcons(Vr3,Vrtr1) )
          & ( VRawTable1 = Vrt23 )
          & ( vrawDifference(VRawTable0,VRawTable1) = Vdrt1rt21 ) ) ) ).

tff('isSomeTable-0',axiom,
    ~ visSomeTable(vnoTable) ).

tff('isSomeTable-1',axiom,
    ! [VwildcardName0: vTable] : visSomeTable(vsomeTable(VwildcardName0)) ).

tff('isSomeTable-true-INV',axiom,
    ! [VOptTable0: vOptTable] :
      ( visSomeTable(VOptTable0)
     => ? [VwildcardName0: vTable] : ( VOptTable0 = vsomeTable(VwildcardName0) ) ) ).

tff('isSomeTable-false-INV',axiom,
    ! [VOptTable0: vOptTable] :
      ( ~ visSomeTable(VOptTable0)
     => ( VOptTable0 = vnoTable ) ) ).

tff('lookupStore-0',axiom,
    ! [VwildcardName0: vName] : ( vlookupStore(VwildcardName0,vemptyStore) = vnoTable ) ).

tff('lookupStore-1',axiom,
    ! [Vm: vName,Vt: vTable,Vtsr: vTStore] : ( vlookupStore(Vm,vbindStore(Vm,Vt,Vtsr)) = vsomeTable(Vt) ) ).

tff('lookupStore-2',axiom,
    ! [Vn: vName,Vm: vName,Vt: vTable,Vtsr: vTStore] :
      ( ( Vn != Vm )
     => ( vlookupStore(Vn,vbindStore(Vm,Vt,Vtsr)) = vlookupStore(Vn,Vtsr) ) ) ).

tff('lookupStore-INV',axiom,
    ! [VName0: vName,VTStore0: vTStore] :
      ( ? [VwildcardName00: vName] :
          ( ( VName0 = VwildcardName00 )
          & ( VTStore0 = vemptyStore )
          & ( vlookupStore(VName0,VTStore0) = vnoTable ) )
      | ? [Vm0: vName,Vt0: vTable,Vtsr0: vTStore,Vn0: vName] :
          ( ( Vn0 = Vm0 )
          & ( VName0 = Vn0 )
          & ( VTStore0 = vbindStore(Vm0,Vt0,Vtsr0) )
          & ( vlookupStore(VName0,VTStore0) = vsomeTable(Vt0) ) )
      | ? [Vm1: vName,Vt1: vTable,Vtsr1: vTStore,Vn1: vName] :
          ( ( Vn1 != Vm1 )
          & ( VName0 = Vn1 )
          & ( VTStore0 = vbindStore(Vm1,Vt1,Vtsr1) )
          & ( vlookupStore(VName0,VTStore0) = vlookupStore(Vn1,Vtsr1) ) ) ) ).

tff('isSomeTType-0',axiom,
    ~ visSomeTType(vnoTType) ).

tff('isSomeTType-1',axiom,
    ! [VwildcardName0: vTType] : visSomeTType(vsomeTType(VwildcardName0)) ).

tff('isSomeTType-true-INV',axiom,
    ! [VOptTType0: vOptTType] :
      ( visSomeTType(VOptTType0)
     => ? [VwildcardName0: vTType] : ( VOptTType0 = vsomeTType(VwildcardName0) ) ) ).

tff('isSomeTType-false-INV',axiom,
    ! [VOptTType0: vOptTType] :
      ( ~ visSomeTType(VOptTType0)
     => ( VOptTType0 = vnoTType ) ) ).

tff('lookupContext-0',axiom,
    ! [VwildcardName0: vName] : ( vlookupContext(VwildcardName0,vemptyContext) = vnoTType ) ).

tff('lookupContext-1',axiom,
    ! [Vm: vName,Vtt: vTType,Vttcr: vTTContext] : ( vlookupContext(Vm,vbindContext(Vm,Vtt,Vttcr)) = vsomeTType(Vtt) ) ).

tff('lookupContext-2',axiom,
    ! [Vn: vName,Vm: vName,Vtt: vTType,Vttcr: vTTContext] :
      ( ( Vn != Vm )
     => ( vlookupContext(Vn,vbindContext(Vm,Vtt,Vttcr)) = vlookupContext(Vn,Vttcr) ) ) ).

tff('lookupContext-INV',axiom,
    ! [VName0: vName,VTTContext0: vTTContext] :
      ( ? [VwildcardName00: vName] :
          ( ( VName0 = VwildcardName00 )
          & ( VTTContext0 = vemptyContext )
          & ( vlookupContext(VName0,VTTContext0) = vnoTType ) )
      | ? [Vm0: vName,Vtt0: vTType,Vttcr0: vTTContext,Vn0: vName] :
          ( ( Vn0 = Vm0 )
          & ( VName0 = Vn0 )
          & ( VTTContext0 = vbindContext(Vm0,Vtt0,Vttcr0) )
          & ( vlookupContext(VName0,VTTContext0) = vsomeTType(Vtt0) ) )
      | ? [Vm1: vName,Vtt1: vTType,Vttcr1: vTTContext,Vn1: vName] :
          ( ( Vn1 != Vm1 )
          & ( VName0 = Vn1 )
          & ( VTTContext0 = vbindContext(Vm1,Vtt1,Vttcr1) )
          & ( vlookupContext(VName0,VTTContext0) = vlookupContext(Vn1,Vttcr1) ) ) ) ).

tff('isValue-0',axiom,
    ! [VwildcardName0: vTable] : visValue(vtvalue(VwildcardName0)) ).

tff('isValue-1',axiom,
    ! [VwildcardName0: vSelect,VwildcardName1: vName,VwildcardName2: vPred] : ~ visValue(vselectFromWhere(VwildcardName0,VwildcardName1,VwildcardName2)) ).

tff('isValue-2',axiom,
    ! [VwildcardName0: vQuery,VwildcardName1: vQuery] : ~ visValue(vUnion(VwildcardName0,VwildcardName1)) ).

tff('isValue-3',axiom,
    ! [VwildcardName0: vQuery,VwildcardName1: vQuery] : ~ visValue(vIntersection(VwildcardName0,VwildcardName1)) ).

tff('isValue-4',axiom,
    ! [VwildcardName0: vQuery,VwildcardName1: vQuery] : ~ visValue(vDifference(VwildcardName0,VwildcardName1)) ).

tff('isValue-true-INV',axiom,
    ! [VQuery0: vQuery] :
      ( visValue(VQuery0)
     => ? [VwildcardName0: vTable] : ( VQuery0 = vtvalue(VwildcardName0) ) ) ).

tff('isValue-false-INV',axiom,
    ! [VQuery0: vQuery] :
      ( ~ visValue(VQuery0)
     => ( ? [VwildcardName0: vSelect,VwildcardName1: vName,VwildcardName2: vPred] : ( VQuery0 = vselectFromWhere(VwildcardName0,VwildcardName1,VwildcardName2) )
        | ? [VwildcardName0: vQuery,VwildcardName1: vQuery] : ( VQuery0 = vUnion(VwildcardName0,VwildcardName1) )
        | ? [VwildcardName0: vQuery,VwildcardName1: vQuery] : ( VQuery0 = vIntersection(VwildcardName0,VwildcardName1) )
        | ? [VwildcardName0: vQuery,VwildcardName1: vQuery] : ( VQuery0 = vDifference(VwildcardName0,VwildcardName1) ) ) ) ).

tff('isSomeQuery-0',axiom,
    ~ visSomeQuery(vnoQuery) ).

tff('isSomeQuery-1',axiom,
    ! [VwildcardName0: vQuery] : visSomeQuery(vsomeQuery(VwildcardName0)) ).

tff('isSomeQuery-true-INV',axiom,
    ! [VOptQuery0: vOptQuery] :
      ( visSomeQuery(VOptQuery0)
     => ? [VwildcardName0: vQuery] : ( VOptQuery0 = vsomeQuery(VwildcardName0) ) ) ).

tff('isSomeQuery-false-INV',axiom,
    ! [VOptQuery0: vOptQuery] :
      ( ~ visSomeQuery(VOptQuery0)
     => ( VOptQuery0 = vnoQuery ) ) ).

tff('findCol-0',axiom,
    ! [Vn: vName,VwildcardName0: vRawTable] : ( vfindCol(Vn,vaempty,VwildcardName0) = vnoRawTable ) ).

tff('findCol-1',axiom,
    ! [Vn1: vName,Valr: vAttrL,Vrtr: vRawTable] : ( vfindCol(Vn1,vacons(Vn1,Valr),Vrtr) = vsomeRawTable(vprojectFirstRaw(Vrtr)) ) ).

tff('findCol-2',axiom,
    ! [Vn: vName,Vn1: vName,Valr: vAttrL,Vrtr: vRawTable] :
      ( ( Vn != Vn1 )
     => ( vfindCol(Vn,vacons(Vn1,Valr),Vrtr) = vfindCol(Vn,Valr,vdropFirstColRaw(Vrtr)) ) ) ).

tff('findCol-INV',axiom,
    ! [VName0: vName,VAttrL0: vAttrL,VRawTable0: vRawTable] :
      ( ? [Vn0: vName,VwildcardName00: vRawTable] :
          ( ( VName0 = Vn0 )
          & ( VAttrL0 = vaempty )
          & ( VRawTable0 = VwildcardName00 )
          & ( vfindCol(VName0,VAttrL0,VRawTable0) = vnoRawTable ) )
      | ? [Vn10: vName,Valr0: vAttrL,Vn11: vName,Vrtr0: vRawTable] :
          ( ( Vn11 = Vn10 )
          & ( VName0 = Vn11 )
          & ( VAttrL0 = vacons(Vn10,Valr0) )
          & ( VRawTable0 = Vrtr0 )
          & ( vfindCol(VName0,VAttrL0,VRawTable0) = vsomeRawTable(vprojectFirstRaw(Vrtr0)) ) )
      | ? [Vn12: vName,Valr1: vAttrL,Vn2: vName,Vrtr1: vRawTable] :
          ( ( Vn2 != Vn12 )
          & ( VName0 = Vn2 )
          & ( VAttrL0 = vacons(Vn12,Valr1) )
          & ( VRawTable0 = Vrtr1 )
          & ( vfindCol(VName0,VAttrL0,VRawTable0) = vfindCol(Vn2,Valr1,vdropFirstColRaw(Vrtr1)) ) ) ) ).

tff('projectEmptyCol-0',axiom,
    vprojectEmptyCol(vtempty) = vtempty ).

tff('projectEmptyCol-1',axiom,
    ! [VwildcardName0: vRow,Vt: vRawTable] : ( vprojectEmptyCol(vtcons(VwildcardName0,Vt)) = vtcons(vrempty,vprojectEmptyCol(Vt)) ) ).

tff('projectEmptyCol-INV',axiom,
    ! [VRawTable0: vRawTable] :
      ( ( ( VRawTable0 = vtempty )
        & ( vprojectEmptyCol(VRawTable0) = vtempty ) )
      | ? [VwildcardName00: vRow,Vt0: vRawTable] :
          ( ( VRawTable0 = vtcons(VwildcardName00,Vt0) )
          & ( vprojectEmptyCol(VRawTable0) = vtcons(vrempty,vprojectEmptyCol(Vt0)) ) ) ) ).

tff('projectCols-0',axiom,
    ! [VwildcardName0: vAttrL,Vrt: vRawTable] : ( vprojectCols(vaempty,VwildcardName0,Vrt) = vsomeRawTable(vprojectEmptyCol(Vrt)) ) ).

tff('projectCols-1',axiom,
    ! [Vn: vName,Val1: vAttrL,Vrt: vRawTable,Val2: vAttrL] :
      ( ( visSomeRawTable(vfindCol(Vn,Val1,Vrt))
        & visSomeRawTable(vprojectCols(Val2,Val1,Vrt)) )
     => ( vprojectCols(vacons(Vn,Val2),Val1,Vrt) = vsomeRawTable(vattachColToFrontRaw(vgetRawTable(vfindCol(Vn,Val1,Vrt)),vgetRawTable(vprojectCols(Val2,Val1,Vrt)))) ) ) ).

tff('projectCols-2',axiom,
    ! [Vn: vName,Val1: vAttrL,Vrt: vRawTable,Val2: vAttrL] :
      ( ~ ( visSomeRawTable(vfindCol(Vn,Val1,Vrt))
          & visSomeRawTable(vprojectCols(Val2,Val1,Vrt)) )
     => ( vprojectCols(vacons(Vn,Val2),Val1,Vrt) = vnoRawTable ) ) ).

tff('projectCols-INV',axiom,
    ! [VAttrL0: vAttrL,VAttrL1: vAttrL,VRawTable0: vRawTable] :
      ( ? [VwildcardName00: vAttrL,Vrt0: vRawTable] :
          ( ( VAttrL0 = vaempty )
          & ( VAttrL1 = VwildcardName00 )
          & ( VRawTable0 = Vrt0 )
          & ( vprojectCols(VAttrL0,VAttrL1,VRawTable0) = vsomeRawTable(vprojectEmptyCol(Vrt0)) ) )
      | ? [Vrt1: vRawTable,Vrest0: vOptRawTable,Vcol0: vOptRawTable,Val10: vAttrL,Val20: vAttrL,Vn0: vName] :
          ( ( Vcol0 = vfindCol(Vn0,Val10,Vrt1) )
          & ( Vrest0 = vprojectCols(Val20,Val10,Vrt1) )
          & visSomeRawTable(Vcol0)
          & visSomeRawTable(Vrest0)
          & ( VAttrL0 = vacons(Vn0,Val20) )
          & ( VAttrL1 = Val10 )
          & ( VRawTable0 = Vrt1 )
          & ( vprojectCols(VAttrL0,VAttrL1,VRawTable0) = vsomeRawTable(vattachColToFrontRaw(vgetRawTable(Vcol0),vgetRawTable(Vrest0))) ) )
      | ? [Vrt2: vRawTable,Vrest1: vOptRawTable,Vcol1: vOptRawTable,Val11: vAttrL,Val21: vAttrL,Vn1: vName] :
          ( ( Vcol1 = vfindCol(Vn1,Val11,Vrt2) )
          & ( Vrest1 = vprojectCols(Val21,Val11,Vrt2) )
          & ~ ( visSomeRawTable(Vcol1)
              & visSomeRawTable(Vrest1) )
          & ( VAttrL0 = vacons(Vn1,Val21) )
          & ( VAttrL1 = Val11 )
          & ( VRawTable0 = Vrt2 )
          & ( vprojectCols(VAttrL0,VAttrL1,VRawTable0) = vnoRawTable ) ) ) ).

tff('projectTable-0',axiom,
    ! [Vt: vTable] : ( vprojectTable(vall,Vt) = vsomeTable(Vt) ) ).

tff('projectTable-1',axiom,
    ! [Val: vAttrL,Vt: vTable] :
      ( visSomeRawTable(vprojectCols(Val,vgetAttrL(Vt),vgetRaw(Vt)))
     => ( vprojectTable(vlist(Val),Vt) = vsomeTable(vtable(Val,vgetRawTable(vprojectCols(Val,vgetAttrL(Vt),vgetRaw(Vt))))) ) ) ).

tff('projectTable-2',axiom,
    ! [Val: vAttrL,Vt: vTable] :
      ( ~ visSomeRawTable(vprojectCols(Val,vgetAttrL(Vt),vgetRaw(Vt)))
     => ( vprojectTable(vlist(Val),Vt) = vnoTable ) ) ).

tff('projectTable-INV',axiom,
    ! [VSelect0: vSelect,VTable0: vTable] :
      ( ? [Vt0: vTable] :
          ( ( VSelect0 = vall )
          & ( VTable0 = Vt0 )
          & ( vprojectTable(VSelect0,VTable0) = vsomeTable(Vt0) ) )
      | ? [Val0: vAttrL,Vprojected0: vOptRawTable,Vt1: vTable] :
          ( ( Vprojected0 = vprojectCols(Val0,vgetAttrL(Vt1),vgetRaw(Vt1)) )
          & visSomeRawTable(Vprojected0)
          & ( VSelect0 = vlist(Val0) )
          & ( VTable0 = Vt1 )
          & ( vprojectTable(VSelect0,VTable0) = vsomeTable(vtable(Val0,vgetRawTable(Vprojected0))) ) )
      | ? [Val1: vAttrL,Vprojected1: vOptRawTable,Vt2: vTable] :
          ( ( Vprojected1 = vprojectCols(Val1,vgetAttrL(Vt2),vgetRaw(Vt2)) )
          & ~ visSomeRawTable(Vprojected1)
          & ( VSelect0 = vlist(Val1) )
          & ( VTable0 = Vt2 )
          & ( vprojectTable(VSelect0,VTable0) = vnoTable ) ) ) ).

tff('isSomeVal-0',axiom,
    ~ visSomeVal(vnoVal) ).

tff('isSomeVal-1',axiom,
    ! [VwildcardName0: vVal] : visSomeVal(vsomeVal(VwildcardName0)) ).

tff('isSomeVal-true-INV',axiom,
    ! [VOptVal0: vOptVal] :
      ( visSomeVal(VOptVal0)
     => ? [VwildcardName0: vVal] : ( VOptVal0 = vsomeVal(VwildcardName0) ) ) ).

tff('isSomeVal-false-INV',axiom,
    ! [VOptVal0: vOptVal] :
      ( ~ visSomeVal(VOptVal0)
     => ( VOptVal0 = vnoVal ) ) ).

tff('evalExpRow-0',axiom,
    ! [Vv: vVal,VwildcardName0: vAttrL,VwildcardName1: vRow] : ( vevalExpRow(vconstant(Vv),VwildcardName0,VwildcardName1) = vsomeVal(Vv) ) ).

tff('evalExpRow-1',axiom,
    ! [Va2: vName,Val: vAttrL,Vv: vVal,Vr: vRow] : ( vevalExpRow(vlookup(Va2),vacons(Va2,Val),vrcons(Vv,Vr)) = vsomeVal(Vv) ) ).

tff('evalExpRow-2',axiom,
    ! [Vv: vVal,Va: vName,Va2: vName,Vr: vRow,Val: vAttrL] :
      ( ( Va != Va2 )
     => ( vevalExpRow(vlookup(Va),vacons(Va2,Val),vrcons(Vv,Vr)) = vevalExpRow(vlookup(Va),Val,Vr) ) ) ).

tff('evalExpRow-3',axiom,
    ! [VwildcardName0: vExp,VwildcardName1: vAttrL,VwildcardName2: vRow] :
      ( ( ! [Vv0: vVal] : ( VwildcardName0 != vconstant(Vv0) )
        & ( ! [Va0: vName] : ( VwildcardName0 != vlookup(Va0) )
          | ! [Va20: vName,Val0: vAttrL] : ( VwildcardName1 != vacons(Va20,Val0) )
          | ! [Vv0: vVal,Vr0: vRow] : ( VwildcardName2 != vrcons(Vv0,Vr0) ) ) )
     => ( vevalExpRow(VwildcardName0,VwildcardName1,VwildcardName2) = vnoVal ) ) ).

tff('evalExpRow-INV',axiom,
    ! [VExp0: vExp,VAttrL0: vAttrL,VRow0: vRow] :
      ( ? [Vv0: vVal,VwildcardName00: vAttrL,VwildcardName10: vRow] :
          ( ( VExp0 = vconstant(Vv0) )
          & ( VAttrL0 = VwildcardName00 )
          & ( VRow0 = VwildcardName10 )
          & ( vevalExpRow(VExp0,VAttrL0,VRow0) = vsomeVal(Vv0) ) )
      | ? [Vv1: vVal,Va0: vName,Va20: vName,Vr0: vRow,Val0: vAttrL] :
          ( ( Va0 = Va20 )
          & ( VExp0 = vlookup(Va0) )
          & ( VAttrL0 = vacons(Va20,Val0) )
          & ( VRow0 = vrcons(Vv1,Vr0) )
          & ( vevalExpRow(VExp0,VAttrL0,VRow0) = vsomeVal(Vv1) ) )
      | ? [Vv2: vVal,Va1: vName,Va21: vName,Vr1: vRow,Val1: vAttrL] :
          ( ( Va1 != Va21 )
          & ( VExp0 = vlookup(Va1) )
          & ( VAttrL0 = vacons(Va21,Val1) )
          & ( VRow0 = vrcons(Vv2,Vr1) )
          & ( vevalExpRow(VExp0,VAttrL0,VRow0) = vevalExpRow(vlookup(Va1),Val1,Vr1) ) )
      | ? [VwildcardName01: vExp,VwildcardName11: vAttrL,VwildcardName20: vRow] :
          ( ! [Vv000: vVal] : ( VwildcardName01 != vconstant(Vv000) )
          & ( ! [Va000: vName] : ( VwildcardName01 != vlookup(Va000) )
            | ! [Va2000: vName,Val000: vAttrL] : ( VwildcardName11 != vacons(Va2000,Val000) )
            | ! [Vv010: vVal,Vr000: vRow] : ( VwildcardName20 != vrcons(Vv010,Vr000) ) )
          & ( VExp0 = VwildcardName01 )
          & ( VAttrL0 = VwildcardName11 )
          & ( VRow0 = VwildcardName20 )
          & ( vevalExpRow(VExp0,VAttrL0,VRow0) = vnoVal ) ) ) ).

tff('filterSingleRow-0',axiom,
    ! [VwildcardName0: vAttrL,VwildcardName1: vRow] : vfilterSingleRow(vptrue,VwildcardName0,VwildcardName1) ).

tff('filterSingleRow-1',axiom,
    ! [Vp1: vPred,Vp2: vPred,Val: vAttrL,Vr: vRow] :
      ( vfilterSingleRow(vand(Vp1,Vp2),Val,Vr)
    <=> ( vfilterSingleRow(Vp1,Val,Vr)
        & vfilterSingleRow(Vp2,Val,Vr) ) ) ).

tff('filterSingleRow-2',axiom,
    ! [Vpr: vPred,Val: vAttrL,Vr: vRow] :
      ( vfilterSingleRow(vnot(Vpr),Val,Vr)
    <=> ~ vfilterSingleRow(Vpr,Val,Vr) ) ).

tff('filterSingleRow-3',axiom,
    ! [Ve1: vExp,Ve2: vExp,Val: vAttrL,Vr: vRow] :
      ( vfilterSingleRow(veq(Ve1,Ve2),Val,Vr)
    <=> ( visSomeVal(vevalExpRow(Ve1,Val,Vr))
        & visSomeVal(vevalExpRow(Ve2,Val,Vr))
        & ( vgetVal(vevalExpRow(Ve1,Val,Vr)) = vgetVal(vevalExpRow(Ve2,Val,Vr)) ) ) ) ).

tff('filterSingleRow-4',axiom,
    ! [Ve1: vExp,Ve2: vExp,Val: vAttrL,Vr: vRow] :
      ( vfilterSingleRow(vgt(Ve1,Ve2),Val,Vr)
    <=> ( visSomeVal(vevalExpRow(Ve1,Val,Vr))
        & visSomeVal(vevalExpRow(Ve2,Val,Vr))
        & vgreaterThan(vgetVal(vevalExpRow(Ve1,Val,Vr)),vgetVal(vevalExpRow(Ve2,Val,Vr))) ) ) ).

tff('filterSingleRow-5',axiom,
    ! [Ve1: vExp,Ve2: vExp,Val: vAttrL,Vr: vRow] :
      ( vfilterSingleRow(vlt(Ve1,Ve2),Val,Vr)
    <=> ( visSomeVal(vevalExpRow(Ve1,Val,Vr))
        & visSomeVal(vevalExpRow(Ve2,Val,Vr))
        & vlessThan(vgetVal(vevalExpRow(Ve1,Val,Vr)),vgetVal(vevalExpRow(Ve2,Val,Vr))) ) ) ).

tff('filterSingleRow-true-INV',axiom,
    ! [VPred0: vPred,VAttrL0: vAttrL,VRow0: vRow] :
      ( vfilterSingleRow(VPred0,VAttrL0,VRow0)
     => ( ? [VwildcardName0: vAttrL,VwildcardName1: vRow] :
            ( ( VPred0 = vptrue )
            & ( VAttrL0 = VwildcardName0 )
            & ( VRow0 = VwildcardName1 ) )
        | ? [Vp1: vPred,Vp2: vPred,Val: vAttrL,Vr: vRow] :
            ( ( VPred0 = vand(Vp1,Vp2) )
            & ( VAttrL0 = Val )
            & ( VRow0 = Vr )
            & vfilterSingleRow(Vp1,Val,Vr)
            & vfilterSingleRow(Vp2,Val,Vr) )
        | ? [Vpr: vPred,Val: vAttrL,Vr: vRow] :
            ( ( VPred0 = vnot(Vpr) )
            & ( VAttrL0 = Val )
            & ( VRow0 = Vr )
            & ~ vfilterSingleRow(Vpr,Val,Vr) )
        | ? [Ve1: vExp,Vr: vRow,Vv1: vOptVal,Val: vAttrL,Vv2: vOptVal,Ve2: vExp] :
            ( ( Vv1 = vevalExpRow(Ve1,Val,Vr) )
            & ( Vv2 = vevalExpRow(Ve2,Val,Vr) )
            & ( VPred0 = veq(Ve1,Ve2) )
            & ( VAttrL0 = Val )
            & ( VRow0 = Vr )
            & visSomeVal(Vv1)
            & visSomeVal(Vv2)
            & ( vgetVal(Vv1) = vgetVal(Vv2) ) )
        | ? [Ve1: vExp,Vr: vRow,Vv1: vOptVal,Val: vAttrL,Vv2: vOptVal,Ve2: vExp] :
            ( ( Vv1 = vevalExpRow(Ve1,Val,Vr) )
            & ( Vv2 = vevalExpRow(Ve2,Val,Vr) )
            & ( VPred0 = vgt(Ve1,Ve2) )
            & ( VAttrL0 = Val )
            & ( VRow0 = Vr )
            & visSomeVal(Vv1)
            & visSomeVal(Vv2)
            & vgreaterThan(vgetVal(Vv1),vgetVal(Vv2)) )
        | ? [Ve1: vExp,Vr: vRow,Vv1: vOptVal,Val: vAttrL,Vv2: vOptVal,Ve2: vExp] :
            ( ( Vv1 = vevalExpRow(Ve1,Val,Vr) )
            & ( Vv2 = vevalExpRow(Ve2,Val,Vr) )
            & ( VPred0 = vlt(Ve1,Ve2) )
            & ( VAttrL0 = Val )
            & ( VRow0 = Vr )
            & visSomeVal(Vv1)
            & visSomeVal(Vv2)
            & vlessThan(vgetVal(Vv1),vgetVal(Vv2)) ) ) ) ).

tff('filterSingleRow-false-INV',axiom,
    ! [VPred0: vPred,VAttrL0: vAttrL,VRow0: vRow] :
      ( ~ vfilterSingleRow(VPred0,VAttrL0,VRow0)
     => ( ? [Vp1: vPred,Vp2: vPred,Val: vAttrL,Vr: vRow] :
            ( ( VPred0 = vand(Vp1,Vp2) )
            & ( VAttrL0 = Val )
            & ( VRow0 = Vr )
            & ~ ( vfilterSingleRow(Vp1,Val,Vr)
                & vfilterSingleRow(Vp2,Val,Vr) ) )
        | ? [Vpr: vPred,Val: vAttrL,Vr: vRow] :
            ( ( VPred0 = vnot(Vpr) )
            & ( VAttrL0 = Val )
            & ( VRow0 = Vr )
            & vfilterSingleRow(Vpr,Val,Vr) )
        | ? [Ve1: vExp,Vr: vRow,Vv1: vOptVal,Val: vAttrL,Vv2: vOptVal,Ve2: vExp] :
            ( ( Vv1 = vevalExpRow(Ve1,Val,Vr) )
            & ( Vv2 = vevalExpRow(Ve2,Val,Vr) )
            & ( VPred0 = veq(Ve1,Ve2) )
            & ( VAttrL0 = Val )
            & ( VRow0 = Vr )
            & ~ ( visSomeVal(Vv1)
                & visSomeVal(Vv2)
                & ( vgetVal(Vv1) = vgetVal(Vv2) ) ) )
        | ? [Ve1: vExp,Vr: vRow,Vv1: vOptVal,Val: vAttrL,Vv2: vOptVal,Ve2: vExp] :
            ( ( Vv1 = vevalExpRow(Ve1,Val,Vr) )
            & ( Vv2 = vevalExpRow(Ve2,Val,Vr) )
            & ( VPred0 = vgt(Ve1,Ve2) )
            & ( VAttrL0 = Val )
            & ( VRow0 = Vr )
            & ~ ( visSomeVal(Vv1)
                & visSomeVal(Vv2)
                & vgreaterThan(vgetVal(Vv1),vgetVal(Vv2)) ) )
        | ? [Ve1: vExp,Vr: vRow,Vv1: vOptVal,Val: vAttrL,Vv2: vOptVal,Ve2: vExp] :
            ( ( Vv1 = vevalExpRow(Ve1,Val,Vr) )
            & ( Vv2 = vevalExpRow(Ve2,Val,Vr) )
            & ( VPred0 = vlt(Ve1,Ve2) )
            & ( VAttrL0 = Val )
            & ( VRow0 = Vr )
            & ~ ( visSomeVal(Vv1)
                & visSomeVal(Vv2)
                & vlessThan(vgetVal(Vv1),vgetVal(Vv2)) ) ) ) ) ).

tff('filterRows-0',axiom,
    ! [VwildcardName0: vAttrL,VwildcardName1: vPred] : ( vfilterRows(vtempty,VwildcardName0,VwildcardName1) = vtempty ) ).

tff('filterRows-1',axiom,
    ! [Vp: vPred,Val: vAttrL,Vr: vRow,Vrtr: vRawTable] :
      ( vfilterSingleRow(Vp,Val,Vr)
     => ( vfilterRows(vtcons(Vr,Vrtr),Val,Vp) = vtcons(Vr,vfilterRows(Vrtr,Val,Vp)) ) ) ).

tff('filterRows-2',axiom,
    ! [Vp: vPred,Val: vAttrL,Vr: vRow,Vrtr: vRawTable] :
      ( ~ vfilterSingleRow(Vp,Val,Vr)
     => ( vfilterRows(vtcons(Vr,Vrtr),Val,Vp) = vfilterRows(Vrtr,Val,Vp) ) ) ).

tff('filterRows-INV',axiom,
    ! [VRawTable0: vRawTable,VAttrL0: vAttrL,VPred0: vPred] :
      ( ? [VwildcardName00: vAttrL,VwildcardName10: vPred] :
          ( ( VRawTable0 = vtempty )
          & ( VAttrL0 = VwildcardName00 )
          & ( VPred0 = VwildcardName10 )
          & ( vfilterRows(VRawTable0,VAttrL0,VPred0) = vtempty ) )
      | ? [Vp0: vPred,Vr0: vRow,Vrts0: vRawTable,Val0: vAttrL,Vrtr0: vRawTable] :
          ( ( Vrts0 = vfilterRows(Vrtr0,Val0,Vp0) )
          & vfilterSingleRow(Vp0,Val0,Vr0)
          & ( VRawTable0 = vtcons(Vr0,Vrtr0) )
          & ( VAttrL0 = Val0 )
          & ( VPred0 = Vp0 )
          & ( vfilterRows(VRawTable0,VAttrL0,VPred0) = vtcons(Vr0,Vrts0) ) )
      | ? [Vp1: vPred,Vr1: vRow,Vrts1: vRawTable,Val1: vAttrL,Vrtr1: vRawTable] :
          ( ( Vrts1 = vfilterRows(Vrtr1,Val1,Vp1) )
          & ~ vfilterSingleRow(Vp1,Val1,Vr1)
          & ( VRawTable0 = vtcons(Vr1,Vrtr1) )
          & ( VAttrL0 = Val1 )
          & ( VPred0 = Vp1 )
          & ( vfilterRows(VRawTable0,VAttrL0,VPred0) = Vrts1 ) ) ) ).

tff('filterTable-0',axiom,
    ! [Val: vAttrL,Vrt: vRawTable,Vp: vPred] : ( vfilterTable(vtable(Val,Vrt),Vp) = vtable(Val,vfilterRows(Vrt,Val,Vp)) ) ).

tff('filterTable-INV',axiom,
    ! [VTable0: vTable,VPred0: vPred] :
    ? [Val0: vAttrL,Vrt0: vRawTable,Vp0: vPred] :
      ( ( VTable0 = vtable(Val0,Vrt0) )
      & ( VPred0 = Vp0 )
      & ( vfilterTable(VTable0,VPred0) = vtable(Val0,vfilterRows(Vrt0,Val0,Vp0)) ) ) ).

tff('reduce-0',axiom,
    ! [VwildcardName0: vTable,VwildcardName1: vTStore] : ( vreduce(vtvalue(VwildcardName0),VwildcardName1) = vnoQuery ) ).

tff('reduce-1',axiom,
    ! [Vn: vName,Vts: vTStore,Vs: vSelect,Vp: vPred] :
      ( ( visSomeTable(vlookupStore(Vn,Vts))
        & visSomeTable(vprojectTable(Vs,vfilterTable(vgetTable(vlookupStore(Vn,Vts)),Vp))) )
     => ( vreduce(vselectFromWhere(Vs,Vn,Vp),Vts) = vsomeQuery(vtvalue(vgetTable(vprojectTable(Vs,vfilterTable(vgetTable(vlookupStore(Vn,Vts)),Vp))))) ) ) ).

tff('reduce-2',axiom,
    ! [Vn: vName,Vts: vTStore,Vs: vSelect,Vp: vPred] :
      ( ( visSomeTable(vlookupStore(Vn,Vts))
        & ~ visSomeTable(vprojectTable(Vs,vfilterTable(vgetTable(vlookupStore(Vn,Vts)),Vp))) )
     => ( vreduce(vselectFromWhere(Vs,Vn,Vp),Vts) = vnoQuery ) ) ).

tff('reduce-3',axiom,
    ! [Vn: vName,Vts: vTStore,Vs: vSelect,Vp: vPred] :
      ( ~ visSomeTable(vlookupStore(Vn,Vts))
     => ( vreduce(vselectFromWhere(Vs,Vn,Vp),Vts) = vnoQuery ) ) ).

tff('reduce-4',axiom,
    ! [Vt1: vTable,Vt2: vTable,Vts: vTStore] : ( vreduce(vUnion(vtvalue(Vt1),vtvalue(Vt2)),Vts) = vsomeQuery(vtvalue(vtable(vgetAttrL(Vt1),vrawUnion(vgetRaw(Vt1),vgetRaw(Vt2))))) ) ).

tff('reduce-5',axiom,
    ! [Vt: vTable,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vt != Vt100 )
            | ( Vq2 != vtvalue(Vt200) ) )
        & visSomeQuery(vreduce(Vq2,Vts)) )
     => ( vreduce(vUnion(vtvalue(Vt),Vq2),Vts) = vsomeQuery(vUnion(vtvalue(Vt),vgetQuery(vreduce(Vq2,Vts)))) ) ) ).

tff('reduce-6',axiom,
    ! [Vt: vTable,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vt != Vt100 )
            | ( Vq2 != vtvalue(Vt200) ) )
        & ~ visSomeQuery(vreduce(Vq2,Vts)) )
     => ( vreduce(vUnion(vtvalue(Vt),Vq2),Vts) = vnoQuery ) ) ).

tff('reduce-7',axiom,
    ! [Vq1: vQuery,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vq1 != vtvalue(Vt100) )
            | ( Vq2 != vtvalue(Vt200) ) )
        & ! [Vt00: vTable,Vq200: vQuery] :
            ( ( Vq1 != vtvalue(Vt00) )
            | ( Vq2 != Vq200 ) )
        & visSomeQuery(vreduce(Vq1,Vts)) )
     => ( vreduce(vUnion(Vq1,Vq2),Vts) = vsomeQuery(vUnion(vgetQuery(vreduce(Vq1,Vts)),Vq2)) ) ) ).

tff('reduce-8',axiom,
    ! [Vq1: vQuery,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vq1 != vtvalue(Vt100) )
            | ( Vq2 != vtvalue(Vt200) ) )
        & ! [Vt00: vTable,Vq200: vQuery] :
            ( ( Vq1 != vtvalue(Vt00) )
            | ( Vq2 != Vq200 ) )
        & ~ visSomeQuery(vreduce(Vq1,Vts)) )
     => ( vreduce(vUnion(Vq1,Vq2),Vts) = vnoQuery ) ) ).

tff('reduce-9',axiom,
    ! [Vt1: vTable,Vt2: vTable,Vts: vTStore] : ( vreduce(vIntersection(vtvalue(Vt1),vtvalue(Vt2)),Vts) = vsomeQuery(vtvalue(vtable(vgetAttrL(Vt1),vrawIntersection(vgetRaw(Vt1),vgetRaw(Vt2))))) ) ).

tff('reduce-10',axiom,
    ! [Vt: vTable,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vt != Vt100 )
            | ( Vq2 != vtvalue(Vt200) ) )
        & visSomeQuery(vreduce(Vq2,Vts)) )
     => ( vreduce(vIntersection(vtvalue(Vt),Vq2),Vts) = vsomeQuery(vIntersection(vtvalue(Vt),vgetQuery(vreduce(Vq2,Vts)))) ) ) ).

tff('reduce-11',axiom,
    ! [Vt: vTable,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vt != Vt100 )
            | ( Vq2 != vtvalue(Vt200) ) )
        & ~ visSomeQuery(vreduce(Vq2,Vts)) )
     => ( vreduce(vIntersection(vtvalue(Vt),Vq2),Vts) = vnoQuery ) ) ).

tff('reduce-12',axiom,
    ! [Vq1: vQuery,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vq1 != vtvalue(Vt100) )
            | ( Vq2 != vtvalue(Vt200) ) )
        & ! [Vt00: vTable,Vq200: vQuery] :
            ( ( Vq1 != vtvalue(Vt00) )
            | ( Vq2 != Vq200 ) )
        & visSomeQuery(vreduce(Vq1,Vts)) )
     => ( vreduce(vIntersection(Vq1,Vq2),Vts) = vsomeQuery(vIntersection(vgetQuery(vreduce(Vq1,Vts)),Vq2)) ) ) ).

tff('reduce-13',axiom,
    ! [Vq1: vQuery,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vq1 != vtvalue(Vt100) )
            | ( Vq2 != vtvalue(Vt200) ) )
        & ! [Vt00: vTable,Vq200: vQuery] :
            ( ( Vq1 != vtvalue(Vt00) )
            | ( Vq2 != Vq200 ) )
        & ~ visSomeQuery(vreduce(Vq1,Vts)) )
     => ( vreduce(vIntersection(Vq1,Vq2),Vts) = vnoQuery ) ) ).

tff('reduce-14',axiom,
    ! [Vt1: vTable,Vt2: vTable,Vts: vTStore] : ( vreduce(vDifference(vtvalue(Vt1),vtvalue(Vt2)),Vts) = vsomeQuery(vtvalue(vtable(vgetAttrL(Vt1),vrawDifference(vgetRaw(Vt1),vgetRaw(Vt2))))) ) ).

tff('reduce-15',axiom,
    ! [Vt: vTable,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vt != Vt100 )
            | ( Vq2 != vtvalue(Vt200) ) )
        & visSomeQuery(vreduce(Vq2,Vts)) )
     => ( vreduce(vDifference(vtvalue(Vt),Vq2),Vts) = vsomeQuery(vDifference(vtvalue(Vt),vgetQuery(vreduce(Vq2,Vts)))) ) ) ).

tff('reduce-16',axiom,
    ! [Vt: vTable,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vt != Vt100 )
            | ( Vq2 != vtvalue(Vt200) ) )
        & ~ visSomeQuery(vreduce(Vq2,Vts)) )
     => ( vreduce(vDifference(vtvalue(Vt),Vq2),Vts) = vnoQuery ) ) ).

tff('reduce-17',axiom,
    ! [Vq1: vQuery,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vq1 != vtvalue(Vt100) )
            | ( Vq2 != vtvalue(Vt200) ) )
        & ! [Vt00: vTable,Vq200: vQuery] :
            ( ( Vq1 != vtvalue(Vt00) )
            | ( Vq2 != Vq200 ) )
        & visSomeQuery(vreduce(Vq1,Vts)) )
     => ( vreduce(vDifference(Vq1,Vq2),Vts) = vsomeQuery(vDifference(vgetQuery(vreduce(Vq1,Vts)),Vq2)) ) ) ).

tff('reduce-18',axiom,
    ! [Vq1: vQuery,Vq2: vQuery,Vts: vTStore] :
      ( ( ! [Vt100: vTable,Vt200: vTable] :
            ( ( Vq1 != vtvalue(Vt100) )
            | ( Vq2 != vtvalue(Vt200) ) )
        & ! [Vt00: vTable,Vq200: vQuery] :
            ( ( Vq1 != vtvalue(Vt00) )
            | ( Vq2 != Vq200 ) )
        & ~ visSomeQuery(vreduce(Vq1,Vts)) )
     => ( vreduce(vDifference(Vq1,Vq2),Vts) = vnoQuery ) ) ).

tff('reduce-INV',axiom,
    ! [VQuery0: vQuery,VTStore0: vTStore] :
      ( ? [VwildcardName00: vTable,VwildcardName10: vTStore] :
          ( ( VQuery0 = vtvalue(VwildcardName00) )
          & ( VTStore0 = VwildcardName10 )
          & ( vreduce(VQuery0,VTStore0) = vnoQuery ) )
      | ? [Vp0: vPred,Vfiltered0: vTable,Vs0: vSelect,VmaybeTable0: vOptTable,VmaybeSelected0: vOptTable,Vts0: vTStore,Vn0: vName] :
          ( ( VmaybeTable0 = vlookupStore(Vn0,Vts0) )
          & visSomeTable(VmaybeTable0)
          & ( Vfiltered0 = vfilterTable(vgetTable(VmaybeTable0),Vp0) )
          & ( VmaybeSelected0 = vprojectTable(Vs0,Vfiltered0) )
          & visSomeTable(VmaybeSelected0)
          & ( VQuery0 = vselectFromWhere(Vs0,Vn0,Vp0) )
          & ( VTStore0 = Vts0 )
          & ( vreduce(VQuery0,VTStore0) = vsomeQuery(vtvalue(vgetTable(VmaybeSelected0))) ) )
      | ? [Vp1: vPred,Vfiltered1: vTable,Vs1: vSelect,VmaybeTable1: vOptTable,VmaybeSelected1: vOptTable,Vts1: vTStore,Vn1: vName] :
          ( ( VmaybeTable1 = vlookupStore(Vn1,Vts1) )
          & visSomeTable(VmaybeTable1)
          & ( Vfiltered1 = vfilterTable(vgetTable(VmaybeTable1),Vp1) )
          & ( VmaybeSelected1 = vprojectTable(Vs1,Vfiltered1) )
          & ~ visSomeTable(VmaybeSelected1)
          & ( VQuery0 = vselectFromWhere(Vs1,Vn1,Vp1) )
          & ( VTStore0 = Vts1 )
          & ( vreduce(VQuery0,VTStore0) = vnoQuery ) )
      | ? [Vp2: vPred,Vs2: vSelect,VmaybeTable2: vOptTable,Vts2: vTStore,Vn2: vName] :
          ( ( VmaybeTable2 = vlookupStore(Vn2,Vts2) )
          & ~ visSomeTable(VmaybeTable2)
          & ( VQuery0 = vselectFromWhere(Vs2,Vn2,Vp2) )
          & ( VTStore0 = Vts2 )
          & ( vreduce(VQuery0,VTStore0) = vnoQuery ) )
      | ? [Vt10: vTable,Vt20: vTable,Vts3: vTStore] :
          ( ( VQuery0 = vUnion(vtvalue(Vt10),vtvalue(Vt20)) )
          & ( VTStore0 = Vts3 )
          & ( vreduce(VQuery0,VTStore0) = vsomeQuery(vtvalue(vtable(vgetAttrL(Vt10),vrawUnion(vgetRaw(Vt10),vgetRaw(Vt20))))) ) )
      | ? [Vt0: vTable,Vq20: vQuery,Vq2reduce0: vOptQuery,Vts4: vTStore] :
          ( ! [Vt1000: vTable,Vt2000: vTable] :
              ( ( Vt0 != Vt1000 )
              | ( Vq20 != vtvalue(Vt2000) ) )
          & ( Vq2reduce0 = vreduce(Vq20,Vts4) )
          & visSomeQuery(Vq2reduce0)
          & ( VQuery0 = vUnion(vtvalue(Vt0),Vq20) )
          & ( VTStore0 = Vts4 )
          & ( vreduce(VQuery0,VTStore0) = vsomeQuery(vUnion(vtvalue(Vt0),vgetQuery(Vq2reduce0))) ) )
      | ? [Vt11: vTable,Vq21: vQuery,Vq2reduce1: vOptQuery,Vts5: vTStore] :
          ( ! [Vt1010: vTable,Vt2010: vTable] :
              ( ( Vt11 != Vt1010 )
              | ( Vq21 != vtvalue(Vt2010) ) )
          & ( Vq2reduce1 = vreduce(Vq21,Vts5) )
          & ~ visSomeQuery(Vq2reduce1)
          & ( VQuery0 = vUnion(vtvalue(Vt11),Vq21) )
          & ( VTStore0 = Vts5 )
          & ( vreduce(VQuery0,VTStore0) = vnoQuery ) )
      | ? [Vq10: vQuery,Vq22: vQuery,Vq1reduce0: vOptQuery,Vts6: vTStore] :
          ( ! [Vt1020: vTable,Vt2020: vTable] :
              ( ( Vq10 != vtvalue(Vt1020) )
              | ( Vq22 != vtvalue(Vt2020) ) )
          & ! [Vt000: vTable,Vq2000: vQuery] :
              ( ( Vq10 != vtvalue(Vt000) )
              | ( Vq22 != Vq2000 ) )
          & ( Vq1reduce0 = vreduce(Vq10,Vts6) )
          & visSomeQuery(Vq1reduce0)
          & ( VQuery0 = vUnion(Vq10,Vq22) )
          & ( VTStore0 = Vts6 )
          & ( vreduce(VQuery0,VTStore0) = vsomeQuery(vUnion(vgetQuery(Vq1reduce0),Vq22)) ) )
      | ? [Vq11: vQuery,Vq23: vQuery,Vq1reduce1: vOptQuery,Vts7: vTStore] :
          ( ! [Vt1030: vTable,Vt2030: vTable] :
              ( ( Vq11 != vtvalue(Vt1030) )
              | ( Vq23 != vtvalue(Vt2030) ) )
          & ! [Vt010: vTable,Vq2010: vQuery] :
              ( ( Vq11 != vtvalue(Vt010) )
              | ( Vq23 != Vq2010 ) )
          & ( Vq1reduce1 = vreduce(Vq11,Vts7) )
          & ~ visSomeQuery(Vq1reduce1)
          & ( VQuery0 = vUnion(Vq11,Vq23) )
          & ( VTStore0 = Vts7 )
          & ( vreduce(VQuery0,VTStore0) = vnoQuery ) )
      | ? [Vt12: vTable,Vt21: vTable,Vts8: vTStore] :
          ( ( VQuery0 = vIntersection(vtvalue(Vt12),vtvalue(Vt21)) )
          & ( VTStore0 = Vts8 )
          & ( vreduce(VQuery0,VTStore0) = vsomeQuery(vtvalue(vtable(vgetAttrL(Vt12),vrawIntersection(vgetRaw(Vt12),vgetRaw(Vt21))))) ) )
      | ? [Vt22: vTable,Vq24: vQuery,Vq2reduce2: vOptQuery,Vts9: vTStore] :
          ( ! [Vt1040: vTable,Vt2040: vTable] :
              ( ( Vt22 != Vt1040 )
              | ( Vq24 != vtvalue(Vt2040) ) )
          & ( Vq2reduce2 = vreduce(Vq24,Vts9) )
          & visSomeQuery(Vq2reduce2)
          & ( VQuery0 = vIntersection(vtvalue(Vt22),Vq24) )
          & ( VTStore0 = Vts9 )
          & ( vreduce(VQuery0,VTStore0) = vsomeQuery(vIntersection(vtvalue(Vt22),vgetQuery(Vq2reduce2))) ) )
      | ? [Vt3: vTable,Vq25: vQuery,Vq2reduce3: vOptQuery,Vts10: vTStore] :
          ( ! [Vt1050: vTable,Vt2050: vTable] :
              ( ( Vt3 != Vt1050 )
              | ( Vq25 != vtvalue(Vt2050) ) )
          & ( Vq2reduce3 = vreduce(Vq25,Vts10) )
          & ~ visSomeQuery(Vq2reduce3)
          & ( VQuery0 = vIntersection(vtvalue(Vt3),Vq25) )
          & ( VTStore0 = Vts10 )
          & ( vreduce(VQuery0,VTStore0) = vnoQuery ) )
      | ? [Vq12: vQuery,Vq26: vQuery,Vq1reduce2: vOptQuery,Vts11: vTStore] :
          ( ! [Vt1060: vTable,Vt2060: vTable] :
              ( ( Vq12 != vtvalue(Vt1060) )
              | ( Vq26 != vtvalue(Vt2060) ) )
          & ! [Vt020: vTable,Vq2020: vQuery] :
              ( ( Vq12 != vtvalue(Vt020) )
              | ( Vq26 != Vq2020 ) )
          & ( Vq1reduce2 = vreduce(Vq12,Vts11) )
          & visSomeQuery(Vq1reduce2)
          & ( VQuery0 = vIntersection(Vq12,Vq26) )
          & ( VTStore0 = Vts11 )
          & ( vreduce(VQuery0,VTStore0) = vsomeQuery(vIntersection(vgetQuery(Vq1reduce2),Vq26)) ) )
      | ? [Vq13: vQuery,Vq27: vQuery,Vq1reduce3: vOptQuery,Vts12: vTStore] :
          ( ! [Vt1070: vTable,Vt2070: vTable] :
              ( ( Vq13 != vtvalue(Vt1070) )
              | ( Vq27 != vtvalue(Vt2070) ) )
          & ! [Vt030: vTable,Vq2030: vQuery] :
              ( ( Vq13 != vtvalue(Vt030) )
              | ( Vq27 != Vq2030 ) )
          & ( Vq1reduce3 = vreduce(Vq13,Vts12) )
          & ~ visSomeQuery(Vq1reduce3)
          & ( VQuery0 = vIntersection(Vq13,Vq27) )
          & ( VTStore0 = Vts12 )
          & ( vreduce(VQuery0,VTStore0) = vnoQuery ) )
      | ? [Vt13: vTable,Vt23: vTable,Vts13: vTStore] :
          ( ( VQuery0 = vDifference(vtvalue(Vt13),vtvalue(Vt23)) )
          & ( VTStore0 = Vts13 )
          & ( vreduce(VQuery0,VTStore0) = vsomeQuery(vtvalue(vtable(vgetAttrL(Vt13),vrawDifference(vgetRaw(Vt13),vgetRaw(Vt23))))) ) )
      | ? [Vt4: vTable,Vq28: vQuery,Vq2reduce4: vOptQuery,Vts14: vTStore] :
          ( ! [Vt1080: vTable,Vt2080: vTable] :
              ( ( Vt4 != Vt1080 )
              | ( Vq28 != vtvalue(Vt2080) ) )
          & ( Vq2reduce4 = vreduce(Vq28,Vts14) )
          & visSomeQuery(Vq2reduce4)
          & ( VQuery0 = vDifference(vtvalue(Vt4),Vq28) )
          & ( VTStore0 = Vts14 )
          & ( vreduce(VQuery0,VTStore0) = vsomeQuery(vDifference(vtvalue(Vt4),vgetQuery(Vq2reduce4))) ) )
      | ? [Vt5: vTable,Vq29: vQuery,Vq2reduce5: vOptQuery,Vts15: vTStore] :
          ( ! [Vt1090: vTable,Vt2090: vTable] :
              ( ( Vt5 != Vt1090 )
              | ( Vq29 != vtvalue(Vt2090) ) )
          & ( Vq2reduce5 = vreduce(Vq29,Vts15) )
          & ~ visSomeQuery(Vq2reduce5)
          & ( VQuery0 = vDifference(vtvalue(Vt5),Vq29) )
          & ( VTStore0 = Vts15 )
          & ( vreduce(VQuery0,VTStore0) = vnoQuery ) )
      | ? [Vq14: vQuery,Vq210: vQuery,Vq1reduce4: vOptQuery,Vts16: vTStore] :
          ( ! [Vt10100: vTable,Vt20100: vTable] :
              ( ( Vq14 != vtvalue(Vt10100) )
              | ( Vq210 != vtvalue(Vt20100) ) )
          & ! [Vt040: vTable,Vq2040: vQuery] :
              ( ( Vq14 != vtvalue(Vt040) )
              | ( Vq210 != Vq2040 ) )
          & ( Vq1reduce4 = vreduce(Vq14,Vts16) )
          & visSomeQuery(Vq1reduce4)
          & ( VQuery0 = vDifference(Vq14,Vq210) )
          & ( VTStore0 = Vts16 )
          & ( vreduce(VQuery0,VTStore0) = vsomeQuery(vDifference(vgetQuery(Vq1reduce4),Vq210)) ) )
      | ? [Vq15: vQuery,Vq211: vQuery,Vq1reduce5: vOptQuery,Vts17: vTStore] :
          ( ! [Vt10110: vTable,Vt20110: vTable] :
              ( ( Vq15 != vtvalue(Vt10110) )
              | ( Vq211 != vtvalue(Vt20110) ) )
          & ! [Vt050: vTable,Vq2050: vQuery] :
              ( ( Vq15 != vtvalue(Vt050) )
              | ( Vq211 != Vq2050 ) )
          & ( Vq1reduce5 = vreduce(Vq15,Vts17) )
          & ~ visSomeQuery(Vq1reduce5)
          & ( VQuery0 = vDifference(Vq15,Vq211) )
          & ( VTStore0 = Vts17 )
          & ( vreduce(VQuery0,VTStore0) = vnoQuery ) ) ) ).

tff('isSomeFType-0',axiom,
    ~ visSomeFType(vnoFType) ).

tff('isSomeFType-1',axiom,
    ! [Va: vFType] : visSomeFType(vsomeFType(Va)) ).

tff('isSomeFType-true-INV',axiom,
    ! [VOptFType0: vOptFType] :
      ( visSomeFType(VOptFType0)
     => ? [Va: vFType] : ( VOptFType0 = vsomeFType(Va) ) ) ).

tff('isSomeFType-false-INV',axiom,
    ! [VOptFType0: vOptFType] :
      ( ~ visSomeFType(VOptFType0)
     => ( VOptFType0 = vnoFType ) ) ).

tff('findColType-0',axiom,
    ! [Vn: vName] : ( vfindColType(Vn,vttempty) = vnoFType ) ).

tff('findColType-1',axiom,
    ! [Va: vName,Vft: vFType,Vttr: vTType] : ( vfindColType(Va,vttcons(Va,Vft,Vttr)) = vsomeFType(Vft) ) ).

tff('findColType-2',axiom,
    ! [Vn: vName,Va: vName,Vft: vFType,Vttr: vTType] :
      ( ( Vn != Va )
     => ( vfindColType(Vn,vttcons(Va,Vft,Vttr)) = vfindColType(Vn,Vttr) ) ) ).

tff('findColType-INV',axiom,
    ! [VName0: vName,VTType0: vTType] :
      ( ? [Vn0: vName] :
          ( ( VName0 = Vn0 )
          & ( VTType0 = vttempty )
          & ( vfindColType(VName0,VTType0) = vnoFType ) )
      | ? [Va0: vName,Vft0: vFType,Vttr0: vTType,Vn1: vName] :
          ( ( Vn1 = Va0 )
          & ( VName0 = Vn1 )
          & ( VTType0 = vttcons(Va0,Vft0,Vttr0) )
          & ( vfindColType(VName0,VTType0) = vsomeFType(Vft0) ) )
      | ? [Va1: vName,Vft1: vFType,Vttr1: vTType,Vn2: vName] :
          ( ( Vn2 != Va1 )
          & ( VName0 = Vn2 )
          & ( VTType0 = vttcons(Va1,Vft1,Vttr1) )
          & ( vfindColType(VName0,VTType0) = vfindColType(Vn2,Vttr1) ) ) ) ).

tff('projectTypeAttrL-0',axiom,
    ! [Vtt: vTType] : ( vprojectTypeAttrL(vaempty,Vtt) = vsomeTType(vttempty) ) ).

tff('projectTypeAttrL-1',axiom,
    ! [Va: vName,Vtt: vTType,Valr: vAttrL] :
      ( ( visSomeFType(vfindColType(Va,Vtt))
        & visSomeTType(vprojectTypeAttrL(Valr,Vtt)) )
     => ( vprojectTypeAttrL(vacons(Va,Valr),Vtt) = vsomeTType(vttcons(Va,vgetFType(vfindColType(Va,Vtt)),vgetTType(vprojectTypeAttrL(Valr,Vtt)))) ) ) ).

tff('projectTypeAttrL-2',axiom,
    ! [Va: vName,Vtt: vTType,Valr: vAttrL] :
      ( ~ ( visSomeFType(vfindColType(Va,Vtt))
          & visSomeTType(vprojectTypeAttrL(Valr,Vtt)) )
     => ( vprojectTypeAttrL(vacons(Va,Valr),Vtt) = vnoTType ) ) ).

tff('projectTypeAttrL-INV',axiom,
    ! [VAttrL0: vAttrL,VTType0: vTType] :
      ( ? [Vtt0: vTType] :
          ( ( VAttrL0 = vaempty )
          & ( VTType0 = Vtt0 )
          & ( vprojectTypeAttrL(VAttrL0,VTType0) = vsomeTType(vttempty) ) )
      | ? [Va0: vName,Vft0: vOptFType,Vtt1: vTType,Valr0: vAttrL,Vtprest0: vOptTType] :
          ( ( Vft0 = vfindColType(Va0,Vtt1) )
          & ( Vtprest0 = vprojectTypeAttrL(Valr0,Vtt1) )
          & visSomeFType(Vft0)
          & visSomeTType(Vtprest0)
          & ( VAttrL0 = vacons(Va0,Valr0) )
          & ( VTType0 = Vtt1 )
          & ( vprojectTypeAttrL(VAttrL0,VTType0) = vsomeTType(vttcons(Va0,vgetFType(Vft0),vgetTType(Vtprest0))) ) )
      | ? [Va1: vName,Vft1: vOptFType,Vtt2: vTType,Valr1: vAttrL,Vtprest1: vOptTType] :
          ( ( Vft1 = vfindColType(Va1,Vtt2) )
          & ( Vtprest1 = vprojectTypeAttrL(Valr1,Vtt2) )
          & ~ ( visSomeFType(Vft1)
              & visSomeTType(Vtprest1) )
          & ( VAttrL0 = vacons(Va1,Valr1) )
          & ( VTType0 = Vtt2 )
          & ( vprojectTypeAttrL(VAttrL0,VTType0) = vnoTType ) ) ) ).

tff('projectType-0',axiom,
    ! [Vtt1: vTType] : ( vprojectType(vall,Vtt1) = vsomeTType(Vtt1) ) ).

tff('projectType-1',axiom,
    ! [Val: vAttrL,Vtt1: vTType] : ( vprojectType(vlist(Val),Vtt1) = vprojectTypeAttrL(Val,Vtt1) ) ).

tff('projectType-INV',axiom,
    ! [VSelect0: vSelect,VTType0: vTType] :
      ( ? [Vtt10: vTType] :
          ( ( VSelect0 = vall )
          & ( VTType0 = Vtt10 )
          & ( vprojectType(VSelect0,VTType0) = vsomeTType(Vtt10) ) )
      | ? [Val0: vAttrL,Vtt11: vTType] :
          ( ( VSelect0 = vlist(Val0) )
          & ( VTType0 = Vtt11 )
          & ( vprojectType(VSelect0,VTType0) = vprojectTypeAttrL(Val0,Vtt11) ) ) ) ).

tff('typeOfExp-0',axiom,
    ! [Vfv: vVal,Vtt: vTType] : ( vtypeOfExp(vconstant(Vfv),Vtt) = vsomeFType(vfieldType(Vfv)) ) ).

tff('typeOfExp-1',axiom,
    ! [Vn: vName] : ( vtypeOfExp(vlookup(Vn),vttempty) = vnoFType ) ).

tff('typeOfExp-2',axiom,
    ! [Va2: vName,Vft: vFType,Vttr: vTType] : ( vtypeOfExp(vlookup(Va2),vttcons(Va2,Vft,Vttr)) = vsomeFType(Vft) ) ).

tff('typeOfExp-3',axiom,
    ! [Vn: vName,Va2: vName,Vft: vFType,Vttr: vTType] :
      ( ( Vn != Va2 )
     => ( vtypeOfExp(vlookup(Vn),vttcons(Va2,Vft,Vttr)) = vtypeOfExp(vlookup(Vn),Vttr) ) ) ).

tff('typeOfExp-INV',axiom,
    ! [VExp0: vExp,VTType0: vTType] :
      ( ? [Vfv0: vVal,Vtt0: vTType] :
          ( ( VExp0 = vconstant(Vfv0) )
          & ( VTType0 = Vtt0 )
          & ( vtypeOfExp(VExp0,VTType0) = vsomeFType(vfieldType(Vfv0)) ) )
      | ? [Vn0: vName] :
          ( ( VExp0 = vlookup(Vn0) )
          & ( VTType0 = vttempty )
          & ( vtypeOfExp(VExp0,VTType0) = vnoFType ) )
      | ? [Vn1: vName,Va20: vName,Vft0: vFType,Vttr0: vTType] :
          ( ( Vn1 = Va20 )
          & ( VExp0 = vlookup(Vn1) )
          & ( VTType0 = vttcons(Va20,Vft0,Vttr0) )
          & ( vtypeOfExp(VExp0,VTType0) = vsomeFType(Vft0) ) )
      | ? [Vn2: vName,Va21: vName,Vft1: vFType,Vttr1: vTType] :
          ( ( Vn2 != Va21 )
          & ( VExp0 = vlookup(Vn2) )
          & ( VTType0 = vttcons(Va21,Vft1,Vttr1) )
          & ( vtypeOfExp(VExp0,VTType0) = vtypeOfExp(vlookup(Vn2),Vttr1) ) ) ) ).

tff('tcheckPred-0',axiom,
    ! [Vtt: vTType] : vtcheckPred(vptrue,Vtt) ).

tff('tcheckPred-1',axiom,
    ! [Vp1: vPred,Vp2: vPred,Vtt: vTType] :
      ( vtcheckPred(vand(Vp1,Vp2),Vtt)
    <=> ( vtcheckPred(Vp1,Vtt)
        & vtcheckPred(Vp2,Vtt) ) ) ).

tff('tcheckPred-2',axiom,
    ! [Vp: vPred,Vtt: vTType] :
      ( vtcheckPred(vnot(Vp),Vtt)
    <=> vtcheckPred(Vp,Vtt) ) ).

tff('tcheckPred-3',axiom,
    ! [Ve1: vExp,Ve2: vExp,Vtt: vTType] :
      ( vtcheckPred(veq(Ve1,Ve2),Vtt)
    <=> ( visSomeFType(vtypeOfExp(Ve1,Vtt))
        & visSomeFType(vtypeOfExp(Ve2,Vtt))
        & ( vgetFType(vtypeOfExp(Ve1,Vtt)) = vgetFType(vtypeOfExp(Ve2,Vtt)) ) ) ) ).

tff('tcheckPred-4',axiom,
    ! [Ve1: vExp,Ve2: vExp,Vtt: vTType] :
      ( vtcheckPred(vgt(Ve1,Ve2),Vtt)
    <=> ( visSomeFType(vtypeOfExp(Ve1,Vtt))
        & visSomeFType(vtypeOfExp(Ve2,Vtt))
        & ( vgetFType(vtypeOfExp(Ve1,Vtt)) = vgetFType(vtypeOfExp(Ve2,Vtt)) ) ) ) ).

tff('tcheckPred-5',axiom,
    ! [Ve1: vExp,Ve2: vExp,Vtt: vTType] :
      ( vtcheckPred(vlt(Ve1,Ve2),Vtt)
    <=> ( visSomeFType(vtypeOfExp(Ve1,Vtt))
        & visSomeFType(vtypeOfExp(Ve2,Vtt))
        & ( vgetFType(vtypeOfExp(Ve1,Vtt)) = vgetFType(vtypeOfExp(Ve2,Vtt)) ) ) ) ).

tff('tcheckPred-true-INV',axiom,
    ! [VPred0: vPred,VTType0: vTType] :
      ( vtcheckPred(VPred0,VTType0)
     => ( ? [Vtt: vTType] :
            ( ( VPred0 = vptrue )
            & ( VTType0 = Vtt ) )
        | ? [Vp1: vPred,Vp2: vPred,Vtt: vTType] :
            ( ( VPred0 = vand(Vp1,Vp2) )
            & ( VTType0 = Vtt )
            & vtcheckPred(Vp1,Vtt)
            & vtcheckPred(Vp2,Vtt) )
        | ? [Vp: vPred,Vtt: vTType] :
            ( ( VPred0 = vnot(Vp) )
            & ( VTType0 = Vtt )
            & vtcheckPred(Vp,Vtt) )
        | ? [Vt1: vOptFType,Ve1: vExp,Vt2: vOptFType,Ve2: vExp,Vtt: vTType] :
            ( ( Vt1 = vtypeOfExp(Ve1,Vtt) )
            & ( Vt2 = vtypeOfExp(Ve2,Vtt) )
            & ( VPred0 = veq(Ve1,Ve2) )
            & ( VTType0 = Vtt )
            & visSomeFType(Vt1)
            & visSomeFType(Vt2)
            & ( vgetFType(Vt1) = vgetFType(Vt2) ) )
        | ? [Vt1: vOptFType,Ve1: vExp,Vt2: vOptFType,Ve2: vExp,Vtt: vTType] :
            ( ( Vt1 = vtypeOfExp(Ve1,Vtt) )
            & ( Vt2 = vtypeOfExp(Ve2,Vtt) )
            & ( VPred0 = vgt(Ve1,Ve2) )
            & ( VTType0 = Vtt )
            & visSomeFType(Vt1)
            & visSomeFType(Vt2)
            & ( vgetFType(Vt1) = vgetFType(Vt2) ) )
        | ? [Vt1: vOptFType,Ve1: vExp,Vt2: vOptFType,Ve2: vExp,Vtt: vTType] :
            ( ( Vt1 = vtypeOfExp(Ve1,Vtt) )
            & ( Vt2 = vtypeOfExp(Ve2,Vtt) )
            & ( VPred0 = vlt(Ve1,Ve2) )
            & ( VTType0 = Vtt )
            & visSomeFType(Vt1)
            & visSomeFType(Vt2)
            & ( vgetFType(Vt1) = vgetFType(Vt2) ) ) ) ) ).

tff('tcheckPred-false-INV',axiom,
    ! [VPred0: vPred,VTType0: vTType] :
      ( ~ vtcheckPred(VPred0,VTType0)
     => ( ? [Vp1: vPred,Vp2: vPred,Vtt: vTType] :
            ( ( VPred0 = vand(Vp1,Vp2) )
            & ( VTType0 = Vtt )
            & ~ ( vtcheckPred(Vp1,Vtt)
                & vtcheckPred(Vp2,Vtt) ) )
        | ? [Vp: vPred,Vtt: vTType] :
            ( ( VPred0 = vnot(Vp) )
            & ( VTType0 = Vtt )
            & ~ vtcheckPred(Vp,Vtt) )
        | ? [Vt1: vOptFType,Ve1: vExp,Vt2: vOptFType,Ve2: vExp,Vtt: vTType] :
            ( ( Vt1 = vtypeOfExp(Ve1,Vtt) )
            & ( Vt2 = vtypeOfExp(Ve2,Vtt) )
            & ( VPred0 = veq(Ve1,Ve2) )
            & ( VTType0 = Vtt )
            & ~ ( visSomeFType(Vt1)
                & visSomeFType(Vt2)
                & ( vgetFType(Vt1) = vgetFType(Vt2) ) ) )
        | ? [Vt1: vOptFType,Ve1: vExp,Vt2: vOptFType,Ve2: vExp,Vtt: vTType] :
            ( ( Vt1 = vtypeOfExp(Ve1,Vtt) )
            & ( Vt2 = vtypeOfExp(Ve2,Vtt) )
            & ( VPred0 = vgt(Ve1,Ve2) )
            & ( VTType0 = Vtt )
            & ~ ( visSomeFType(Vt1)
                & visSomeFType(Vt2)
                & ( vgetFType(Vt1) = vgetFType(Vt2) ) ) )
        | ? [Vt1: vOptFType,Ve1: vExp,Vt2: vOptFType,Ve2: vExp,Vtt: vTType] :
            ( ( Vt1 = vtypeOfExp(Ve1,Vtt) )
            & ( Vt2 = vtypeOfExp(Ve2,Vtt) )
            & ( VPred0 = vlt(Ve1,Ve2) )
            & ( VTType0 = Vtt )
            & ~ ( visSomeFType(Vt1)
                & visSomeFType(Vt2)
                & ( vgetFType(Vt1) = vgetFType(Vt2) ) ) ) ) ) ).

tff('storeContextConsistent-0',axiom,
    vstoreContextConsistent(vemptyStore,vemptyContext) ).

tff('storeContextConsistent-1',axiom,
    ! [Vtn2: vName,Vt: vTable,Vttcr: vTTContext,Vtn1: vName,Vtsr: vTStore,Vtt: vTType] :
      ( vstoreContextConsistent(vbindStore(Vtn1,Vt,Vtsr),vbindContext(Vtn2,Vtt,Vttcr))
    <=> ( ( Vtn1 = Vtn2 )
        & vwelltypedtable(Vtt,Vt)
        & vstoreContextConsistent(Vtsr,Vttcr) ) ) ).

tff('storeContextConsistent-2',axiom,
    ! [VwildcardName0: vTStore,VwildcardName1: vTTContext] :
      ( ( ( ( VwildcardName0 != vemptyStore )
          | ( VwildcardName1 != vemptyContext ) )
        & ( ! [Vtn10: vName,Vt0: vTable,Vtsr0: vTStore] : ( VwildcardName0 != vbindStore(Vtn10,Vt0,Vtsr0) )
          | ! [Vtn20: vName,Vtt0: vTType,Vttcr0: vTTContext] : ( VwildcardName1 != vbindContext(Vtn20,Vtt0,Vttcr0) ) ) )
     => ~ vstoreContextConsistent(VwildcardName0,VwildcardName1) ) ).

tff('storeContextConsistent-true-INV',axiom,
    ! [VTStore0: vTStore,VTTContext0: vTTContext] :
      ( vstoreContextConsistent(VTStore0,VTTContext0)
     => ( ( ( VTStore0 = vemptyStore )
          & ( VTTContext0 = vemptyContext ) )
        | ? [Vtn2: vName,Vt: vTable,Vttcr: vTTContext,Vtn1: vName,Vtsr: vTStore,Vtt: vTType] :
            ( ( VTStore0 = vbindStore(Vtn1,Vt,Vtsr) )
            & ( VTTContext0 = vbindContext(Vtn2,Vtt,Vttcr) )
            & ( Vtn1 = Vtn2 )
            & vwelltypedtable(Vtt,Vt)
            & vstoreContextConsistent(Vtsr,Vttcr) ) ) ) ).

tff('storeContextConsistent-false-INV',axiom,
    ! [VTStore0: vTStore,VTTContext0: vTTContext] :
      ( ~ vstoreContextConsistent(VTStore0,VTTContext0)
     => ( ? [Vtn2: vName,Vt: vTable,Vttcr: vTTContext,Vtn1: vName,Vtsr: vTStore,Vtt: vTType] :
            ( ( VTStore0 = vbindStore(Vtn1,Vt,Vtsr) )
            & ( VTTContext0 = vbindContext(Vtn2,Vtt,Vttcr) )
            & ~ ( ( Vtn1 = Vtn2 )
                & vwelltypedtable(Vtt,Vt)
                & vstoreContextConsistent(Vtsr,Vttcr) ) )
        | ? [VwildcardName0: vTStore,VwildcardName1: vTTContext] :
            ( ( ( VwildcardName0 != vemptyStore )
              | ( VwildcardName1 != vemptyContext ) )
            & ( ! [Vtn10: vName,Vt0: vTable,Vtsr0: vTStore] : ( VwildcardName0 != vbindStore(Vtn10,Vt0,Vtsr0) )
              | ! [Vtn20: vName,Vtt0: vTType,Vttcr0: vTTContext] : ( VwildcardName1 != vbindContext(Vtn20,Vtt0,Vttcr0) ) )
            & ( VTStore0 = VwildcardName0 )
            & ( VTTContext0 = VwildcardName1 ) ) ) ) ).

tff('TTTContextDuplicate',axiom,
    ! [VTx: vTType,Vy: vName,Ve: vQuery,VC: vTTContext,VTy: vTType,VT: vTType] :
      ( vptcheck(vbindContext(Vy,VTx,vbindContext(Vy,VTy,VC)),Ve,VT)
     => vptcheck(vbindContext(Vy,VTx,VC),Ve,VT) ) ).

tff('TTTContextSwap',axiom,
    ! [Vx: vName,VTx: vTType,Vy: vName,Ve: vQuery,VC: vTTContext,VTy: vTType,VT: vTType] :
      ( ( ( Vx != Vy )
        & vptcheck(vbindContext(Vx,VTx,vbindContext(Vy,VTy,VC)),Ve,VT) )
     => vptcheck(vbindContext(Vy,VTy,vbindContext(Vx,VTx,VC)),Ve,VT) ) ).

tff('Ttvalue',axiom,
    ! [VTT: vTType,Vt: vTable,VTTC: vTTContext] :
      ( vwelltypedtable(VTT,Vt)
     => vptcheck(VTTC,vtvalue(Vt),VTT) ) ).

tff('TSelectFromWhere',axiom,
    ! [Vp: vPred,VTTr: vTType,Vsel: vSelect,VTT: vTType,Vtn: vName,VTTC: vTTContext] :
      ( ( ( vlookupContext(Vtn,VTTC) = vsomeTType(VTT) )
        & vtcheckPred(Vp,VTT)
        & ( vprojectType(Vsel,VTT) = vsomeTType(VTTr) ) )
     => vptcheck(VTTC,vselectFromWhere(Vsel,Vtn,Vp),VTTr) ) ).

tff('TUnion',axiom,
    ! [VTTC: vTTContext,Vq1: vQuery,VTT: vTType,Vq2: vQuery] :
      ( ( vptcheck(VTTC,Vq1,VTT)
        & vptcheck(VTTC,Vq2,VTT) )
     => vptcheck(VTTC,vUnion(Vq1,Vq2),VTT) ) ).

tff('TIntersection',axiom,
    ! [VTTC: vTTContext,Vq1: vQuery,VTT: vTType,Vq2: vQuery] :
      ( ( vptcheck(VTTC,Vq1,VTT)
        & vptcheck(VTTC,Vq2,VTT) )
     => vptcheck(VTTC,vIntersection(Vq1,Vq2),VTT) ) ).

tff('TDifference',axiom,
    ! [VTTC: vTTContext,Vq1: vQuery,VTT: vTType,Vq2: vQuery] :
      ( ( vptcheck(VTTC,Vq1,VTT)
        & vptcheck(VTTC,Vq2,VTT) )
     => vptcheck(VTTC,vDifference(Vq1,Vq2),VTT) ) ).

tff('Ttvalue_inv',axiom,
    ! [VTTC: vTTContext,Vt: vTable,VTT: vTType] :
      ( vptcheck(VTTC,vtvalue(Vt),VTT)
     => vwelltypedtable(VTT,Vt) ) ).

tff('TSelectFromWhere_inv',axiom,
    ! [Vp: vPred,VTTr: vTType,Vsel: vSelect,Vtn: vName,VTTC: vTTContext] :
      ( vptcheck(VTTC,vselectFromWhere(Vsel,Vtn,Vp),VTTr)
     => ? [VTT: vTType] :
          ( ( vlookupContext(Vtn,VTTC) = vsomeTType(VTT) )
          & vtcheckPred(Vp,VTT)
          & ( vprojectType(Vsel,VTT) = vsomeTType(VTTr) ) ) ) ).

tff('TUnion_inv1',axiom,
    ! [VTTC: vTTContext,Vq1: vQuery,Vq2: vQuery,VTT: vTType] :
      ( vptcheck(VTTC,vUnion(Vq1,Vq2),VTT)
     => vptcheck(VTTC,Vq1,VTT) ) ).

tff('TUnion_inv2',axiom,
    ! [VTTC: vTTContext,Vq1: vQuery,Vq2: vQuery,VTT: vTType] :
      ( vptcheck(VTTC,vUnion(Vq1,Vq2),VTT)
     => vptcheck(VTTC,Vq2,VTT) ) ).

tff('TIntersection_inv1',axiom,
    ! [VTTC: vTTContext,Vq1: vQuery,Vq2: vQuery,VTT: vTType] :
      ( vptcheck(VTTC,vIntersection(Vq1,Vq2),VTT)
     => vptcheck(VTTC,Vq1,VTT) ) ).

tff('TIntersection_inv2',axiom,
    ! [VTTC: vTTContext,Vq1: vQuery,Vq2: vQuery,VTT: vTType] :
      ( vptcheck(VTTC,vIntersection(Vq1,Vq2),VTT)
     => vptcheck(VTTC,Vq2,VTT) ) ).

tff('TDifference_inv1',axiom,
    ! [VTTC: vTTContext,Vq1: vQuery,Vq2: vQuery,VTT: vTType] :
      ( vptcheck(VTTC,vDifference(Vq1,Vq2),VTT)
     => vptcheck(VTTC,Vq1,VTT) ) ).

tff('TDifference_inv2',axiom,
    ! [VTTC: vTTContext,Vq1: vQuery,Vq2: vQuery,VTT: vTType] :
      ( vptcheck(VTTC,vDifference(Vq1,Vq2),VTT)
     => vptcheck(VTTC,Vq2,VTT) ) ).

tff('Preservation-Difference-IH0',axiom,
    ! [Vts: vTStore,Vttc: vTTContext,Vtt: vTType,Vqr: vQuery] :
      ( ( vstoreContextConsistent(Vts,Vttc)
        & vptcheck(Vttc,vq1,Vtt)
        & ( vreduce(vq1,Vts) = vsomeQuery(Vqr) ) )
     => vptcheck(Vttc,Vqr,Vtt) ) ).

tff('Preservation-Difference-IH1',axiom,
    ! [Vts: vTStore,Vttc: vTTContext,Vtt: vTType,Vqr: vQuery] :
      ( ( vstoreContextConsistent(Vts,Vttc)
        & vptcheck(Vttc,vq2,Vtt)
        & ( vreduce(vq2,Vts) = vsomeQuery(Vqr) ) )
     => vptcheck(Vttc,Vqr,Vtt) ) ).

tff(rawDifferencePreservesWellTypedRaw,axiom,
    ! [Vtt: vTType,Vrt: vRawTable,Vrt1: vRawTable] :
      ( ( vwelltypedRawtable(Vtt,Vrt)
        & vwelltypedRawtable(Vtt,Vrt1) )
     => vwelltypedRawtable(Vtt,vrawDifference(Vrt,Vrt1)) ) ).

tff('Preservation-Difference-tvalue-tvalue',conjecture,
    ! [Vqr: vQuery,Vt: vTable,Vttc: vTTContext,Vt2: vTable,Vts: vTStore,Vtt: vTType] :
      ( ( ( vq2 = vtvalue(Vt2) )
        & ( vq1 = vtvalue(Vt) )
        & vstoreContextConsistent(Vts,Vttc)
        & vptcheck(Vttc,vDifference(vq1,vq2),Vtt)
        & ( vreduce(vDifference(vq1,vq2),Vts) = vsomeQuery(Vqr) ) )
     => vptcheck(Vttc,Vqr,Vtt) ) ).

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