TPTP Problem File: COM224_1.p
View Solutions
- Solve Problem
%------------------------------------------------------------------------------
% File : COM224_1 : TPTP v9.3.1. Released v9.3.0.
% Domain : Computing Theory
% Problem : AE-Preservation-Pred-Succ-isNV-True
% 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 : AE-Preservation-Pred-Succ-isNV-True [Gre24]
% Status : Theorem
% Rating : 0.17 v9.3.0
% Syntax : Number of formulae : 130 ( 45 unt; 23 typ; 0 def)
% Number of atoms : 377 ( 253 equ)
% Maximal formula atoms : 125 ( 3 avg)
% Number of connectives : 416 ( 146 ~; 54 |; 158 &)
% ( 2 <=>; 56 =>; 0 <=; 0 <~>)
% Maximal formula depth : 40 ( 5 avg)
% Maximal term depth : 6 ( 1 avg)
% Number of types : 4 ( 3 usr)
% Number of type conns : 18 ( 13 >; 5 *; 0 +; 0 <<)
% Number of predicates : 5 ( 4 usr; 0 prp; 1-2 aty)
% Number of functors : 16 ( 16 usr; 7 con; 0-3 aty)
% Number of variables : 299 ( 230 !; 69 ?; 299 :)
% SPC : TF0_THM_EQU_NAR_NDT
% Comments :
%------------------------------------------------------------------------------
tff('Term_type',type,
vTerm: $tType ).
tff('OptTerm_type',type,
vOptTerm: $tType ).
tff('Ty_type',type,
vTy: $tType ).
tff('Nat_type',type,
vNat: vTy ).
tff('Succ_type',type,
vSucc: vTerm > vTerm ).
tff('Pred_type',type,
vPred: vTerm > vTerm ).
tff(someTerm_type,type,
vsomeTerm: vTerm > vOptTerm ).
tff('Zero_type',type,
vZero: vTerm ).
tff('Iszero_type',type,
vIszero: vTerm > vTerm ).
tff('True_type',type,
vTrue: vTerm ).
tff('False_type',type,
vFalse: vTerm ).
tff(noTerm_type,type,
vnoTerm: vOptTerm ).
tff('Plus_type',type,
vPlus: ( vTerm * vTerm ) > vTerm ).
tff('B_type',type,
vB: vTy ).
tff('Ifelse_type',type,
vIfelse: ( vTerm * vTerm * vTerm ) > vTerm ).
tff(t1_type,type,
vt1: vTerm ).
tff(isValue_type,type,
visValue: vTerm > $o ).
tff(isNV_type,type,
visNV: vTerm > $o ).
tff(reduce_type,type,
vreduce: vTerm > vOptTerm ).
tff(plusop_type,type,
vplusop: ( vTerm * vTerm ) > vTerm ).
tff(isSomeTerm_type,type,
visSomeTerm: vOptTerm > $o ).
tff(ptchecksimple_type,type,
vptchecksimple: ( vTerm * vTy ) > $o ).
tff(getTerm_type,type,
vgetTerm: vOptTerm > vTerm ).
tff('dom-Term',axiom,
! [VX: vTerm] :
( ( VX = vTrue )
| ( VX = vFalse )
| ? [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm] : ( VX = vIfelse(VTerm0,VTerm1,VTerm2) )
| ( VX = vZero )
| ? [VTerm0: vTerm] : ( VX = vSucc(VTerm0) )
| ? [VTerm0: vTerm] : ( VX = vPred(VTerm0) )
| ? [VTerm0: vTerm] : ( VX = vIszero(VTerm0) )
| ? [VTerm0: vTerm,VTerm1: vTerm] : ( VX = vPlus(VTerm0,VTerm1) ) ) ).
tff('EQ-Ifelse',axiom,
! [VTerm3: vTerm,VTerm2: vTerm,VTerm1: vTerm,VTerm4: vTerm,VTerm0: vTerm,VTerm5: vTerm] :
( ( vIfelse(VTerm0,VTerm1,VTerm2) = vIfelse(VTerm3,VTerm4,VTerm5) )
=> ( ( VTerm0 = VTerm3 )
& ( VTerm1 = VTerm4 )
& ( VTerm2 = VTerm5 ) ) ) ).
tff('EQ-Succ',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] :
( ( vSucc(VTerm0) = vSucc(VTerm1) )
=> ( VTerm0 = VTerm1 ) ) ).
tff('EQ-Pred',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] :
( ( vPred(VTerm0) = vPred(VTerm1) )
=> ( VTerm0 = VTerm1 ) ) ).
tff('EQ-Iszero',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] :
( ( vIszero(VTerm0) = vIszero(VTerm1) )
=> ( VTerm0 = VTerm1 ) ) ).
tff('EQ-Plus',axiom,
! [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm,VTerm3: vTerm] :
( ( vPlus(VTerm0,VTerm1) = vPlus(VTerm2,VTerm3) )
=> ( ( VTerm0 = VTerm2 )
& ( VTerm1 = VTerm3 ) ) ) ).
tff('DIFF-True-False',axiom,
vTrue != vFalse ).
tff('DIFF-True-Ifelse',axiom,
! [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm] : ( vTrue != vIfelse(VTerm0,VTerm1,VTerm2) ) ).
tff('DIFF-True-Zero',axiom,
vTrue != vZero ).
tff('DIFF-True-Succ',axiom,
! [VTerm0: vTerm] : ( vTrue != vSucc(VTerm0) ) ).
tff('DIFF-True-Pred',axiom,
! [VTerm0: vTerm] : ( vTrue != vPred(VTerm0) ) ).
tff('DIFF-True-Iszero',axiom,
! [VTerm0: vTerm] : ( vTrue != vIszero(VTerm0) ) ).
tff('DIFF-True-Plus',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] : ( vTrue != vPlus(VTerm0,VTerm1) ) ).
tff('DIFF-False-Ifelse',axiom,
! [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm] : ( vFalse != vIfelse(VTerm0,VTerm1,VTerm2) ) ).
tff('DIFF-False-Zero',axiom,
vFalse != vZero ).
tff('DIFF-False-Succ',axiom,
! [VTerm0: vTerm] : ( vFalse != vSucc(VTerm0) ) ).
tff('DIFF-False-Pred',axiom,
! [VTerm0: vTerm] : ( vFalse != vPred(VTerm0) ) ).
tff('DIFF-False-Iszero',axiom,
! [VTerm0: vTerm] : ( vFalse != vIszero(VTerm0) ) ).
tff('DIFF-False-Plus',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] : ( vFalse != vPlus(VTerm0,VTerm1) ) ).
tff('DIFF-Ifelse-Zero',axiom,
! [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm] : ( vIfelse(VTerm0,VTerm1,VTerm2) != vZero ) ).
tff('DIFF-Ifelse-Succ',axiom,
! [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm,VTerm3: vTerm] : ( vIfelse(VTerm0,VTerm1,VTerm2) != vSucc(VTerm3) ) ).
tff('DIFF-Ifelse-Pred',axiom,
! [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm,VTerm3: vTerm] : ( vIfelse(VTerm0,VTerm1,VTerm2) != vPred(VTerm3) ) ).
tff('DIFF-Ifelse-Iszero',axiom,
! [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm,VTerm3: vTerm] : ( vIfelse(VTerm0,VTerm1,VTerm2) != vIszero(VTerm3) ) ).
tff('DIFF-Ifelse-Plus',axiom,
! [VTerm3: vTerm,VTerm2: vTerm,VTerm1: vTerm,VTerm4: vTerm,VTerm0: vTerm] : ( vIfelse(VTerm0,VTerm1,VTerm2) != vPlus(VTerm3,VTerm4) ) ).
tff('DIFF-Zero-Succ',axiom,
! [VTerm0: vTerm] : ( vZero != vSucc(VTerm0) ) ).
tff('DIFF-Zero-Pred',axiom,
! [VTerm0: vTerm] : ( vZero != vPred(VTerm0) ) ).
tff('DIFF-Zero-Iszero',axiom,
! [VTerm0: vTerm] : ( vZero != vIszero(VTerm0) ) ).
tff('DIFF-Zero-Plus',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] : ( vZero != vPlus(VTerm0,VTerm1) ) ).
tff('DIFF-Succ-Pred',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] : ( vSucc(VTerm0) != vPred(VTerm1) ) ).
tff('DIFF-Succ-Iszero',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] : ( vSucc(VTerm0) != vIszero(VTerm1) ) ).
tff('DIFF-Succ-Plus',axiom,
! [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm] : ( vSucc(VTerm0) != vPlus(VTerm1,VTerm2) ) ).
tff('DIFF-Pred-Iszero',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] : ( vPred(VTerm0) != vIszero(VTerm1) ) ).
tff('DIFF-Pred-Plus',axiom,
! [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm] : ( vPred(VTerm0) != vPlus(VTerm1,VTerm2) ) ).
tff('DIFF-Iszero-Plus',axiom,
! [VTerm0: vTerm,VTerm1: vTerm,VTerm2: vTerm] : ( vIszero(VTerm0) != vPlus(VTerm1,VTerm2) ) ).
tff('dom-OptTerm',axiom,
! [VX: vOptTerm] :
( ( VX = vnoTerm )
| ? [VTerm0: vTerm] : ( VX = vsomeTerm(VTerm0) ) ) ).
tff('EQ-someTerm',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] :
( ( vsomeTerm(VTerm0) = vsomeTerm(VTerm1) )
=> ( VTerm0 = VTerm1 ) ) ).
tff('DIFF-noTerm-someTerm',axiom,
! [VTerm0: vTerm] : ( vnoTerm != vsomeTerm(VTerm0) ) ).
tff('dom-Ty',axiom,
! [VX: vTy] :
( ( VX = vB )
| ( VX = vNat ) ) ).
tff('DIFF-B-Nat',axiom,
vB != vNat ).
tff('getTerm-0',axiom,
! [Vt: vTerm] : ( vgetTerm(vsomeTerm(Vt)) = Vt ) ).
tff('isNV-0',axiom,
visNV(vZero) ).
tff('isNV-1',axiom,
! [Vnv: vTerm] :
( visNV(vSucc(Vnv))
<=> visNV(Vnv) ) ).
tff('isNV-2',axiom,
! [VwildcardName0: vTerm] :
( ( ( VwildcardName0 != vZero )
& ! [Vnv0: vTerm] : ( VwildcardName0 != vSucc(Vnv0) ) )
=> ~ visNV(VwildcardName0) ) ).
tff('isNV-true-INV',axiom,
! [VTerm0: vTerm] :
( visNV(VTerm0)
=> ( ( VTerm0 = vZero )
| ? [Vnv: vTerm] :
( ( VTerm0 = vSucc(Vnv) )
& visNV(Vnv) ) ) ) ).
tff('isNV-false-INV',axiom,
! [VTerm0: vTerm] :
( ~ visNV(VTerm0)
=> ( ? [Vnv: vTerm] :
( ( VTerm0 = vSucc(Vnv) )
& ~ visNV(Vnv) )
| ? [VwildcardName0: vTerm] :
( ( VwildcardName0 != vZero )
& ! [Vnv0: vTerm] : ( VwildcardName0 != vSucc(Vnv0) )
& ( VTerm0 = VwildcardName0 ) ) ) ) ).
tff('isValue-0',axiom,
visValue(vTrue) ).
tff('isValue-1',axiom,
visValue(vFalse) ).
tff('isValue-2',axiom,
! [Vt1: vTerm] :
( ( ( Vt1 != vTrue )
& ( Vt1 != vFalse ) )
=> ( visValue(Vt1)
<=> visNV(Vt1) ) ) ).
tff('isValue-true-INV',axiom,
! [VTerm0: vTerm] :
( visValue(VTerm0)
=> ( ( VTerm0 = vTrue )
| ( VTerm0 = vFalse )
| ? [Vt1: vTerm] :
( ( Vt1 != vTrue )
& ( Vt1 != vFalse )
& ( VTerm0 = Vt1 )
& visNV(Vt1) ) ) ) ).
tff('isValue-false-INV',axiom,
! [VTerm0: vTerm] :
( ~ visValue(VTerm0)
=> ? [Vt1: vTerm] :
( ( Vt1 != vTrue )
& ( Vt1 != vFalse )
& ( VTerm0 = Vt1 )
& ~ visNV(Vt1) ) ) ).
tff('isSomeTerm-0',axiom,
~ visSomeTerm(vnoTerm) ).
tff('isSomeTerm-1',axiom,
! [VwildcardName0: vTerm] : visSomeTerm(vsomeTerm(VwildcardName0)) ).
tff('isSomeTerm-true-INV',axiom,
! [VOptTerm0: vOptTerm] :
( visSomeTerm(VOptTerm0)
=> ? [VwildcardName0: vTerm] : ( VOptTerm0 = vsomeTerm(VwildcardName0) ) ) ).
tff('isSomeTerm-false-INV',axiom,
! [VOptTerm0: vOptTerm] :
( ~ visSomeTerm(VOptTerm0)
=> ( VOptTerm0 = vnoTerm ) ) ).
tff('plusop-0',axiom,
! [Vt2: vTerm] : ( vplusop(Vt2,vZero) = Vt2 ) ).
tff('plusop-1',axiom,
! [Vt2: vTerm,Vt3: vTerm] : ( vplusop(Vt2,vSucc(Vt3)) = vSucc(vplusop(Vt2,Vt3)) ) ).
tff('plusop-2',axiom,
! [Vt3: vTerm,Vt2: vTerm] :
( ( ( Vt3 != vZero )
& ! [Vt30: vTerm] : ( Vt3 != vSucc(Vt30) ) )
=> ( vplusop(Vt2,Vt3) = Vt3 ) ) ).
tff('plusop-INV',axiom,
! [VTerm0: vTerm,VTerm1: vTerm] :
( ? [Vt20: vTerm] :
( ( VTerm0 = Vt20 )
& ( VTerm1 = vZero )
& ( vplusop(VTerm0,VTerm1) = Vt20 ) )
| ? [Vt30: vTerm,Vt21: vTerm] :
( ( VTerm0 = Vt21 )
& ( VTerm1 = vSucc(Vt30) )
& ( vplusop(VTerm0,VTerm1) = vSucc(vplusop(Vt21,Vt30)) ) )
| ? [Vt31: vTerm,Vt22: vTerm] :
( ( Vt31 != vZero )
& ! [Vt3000: vTerm] : ( Vt31 != vSucc(Vt3000) )
& ( VTerm0 = Vt22 )
& ( VTerm1 = Vt31 )
& ( vplusop(VTerm0,VTerm1) = Vt31 ) ) ) ).
tff('reduce-0',axiom,
! [Vt2: vTerm,Vt3: vTerm] : ( vreduce(vIfelse(vTrue,Vt2,Vt3)) = vsomeTerm(Vt2) ) ).
tff('reduce-1',axiom,
! [Vt2: vTerm,Vt3: vTerm] : ( vreduce(vIfelse(vFalse,Vt2,Vt3)) = vsomeTerm(Vt3) ) ).
tff('reduce-2',axiom,
! [Vt1: vTerm,Vt2: vTerm,Vt3: vTerm] :
( ( ! [Vt200: vTerm,Vt300: vTerm] :
( ( Vt1 != vTrue )
| ( Vt2 != Vt200 )
| ( Vt3 != Vt300 ) )
& ! [Vt201: vTerm,Vt301: vTerm] :
( ( Vt1 != vFalse )
| ( Vt2 != Vt201 )
| ( Vt3 != Vt301 ) )
& visSomeTerm(vreduce(Vt1)) )
=> ( vreduce(vIfelse(Vt1,Vt2,Vt3)) = vsomeTerm(vIfelse(vgetTerm(vreduce(Vt1)),Vt2,Vt3)) ) ) ).
tff('reduce-3',axiom,
! [Vt1: vTerm,Vt2: vTerm,Vt3: vTerm] :
( ( ! [Vt200: vTerm,Vt300: vTerm] :
( ( Vt1 != vTrue )
| ( Vt2 != Vt200 )
| ( Vt3 != Vt300 ) )
& ! [Vt201: vTerm,Vt301: vTerm] :
( ( Vt1 != vFalse )
| ( Vt2 != Vt201 )
| ( Vt3 != Vt301 ) )
& ~ visSomeTerm(vreduce(Vt1)) )
=> ( vreduce(vIfelse(Vt1,Vt2,Vt3)) = vnoTerm ) ) ).
tff('reduce-4',axiom,
! [Vt1: vTerm] :
( visSomeTerm(vreduce(Vt1))
=> ( vreduce(vSucc(Vt1)) = vsomeTerm(vSucc(vgetTerm(vreduce(Vt1)))) ) ) ).
tff('reduce-5',axiom,
! [Vt1: vTerm] :
( ~ visSomeTerm(vreduce(Vt1))
=> ( vreduce(vSucc(Vt1)) = vnoTerm ) ) ).
tff('reduce-6',axiom,
vreduce(vPred(vZero)) = vsomeTerm(vZero) ).
tff('reduce-7',axiom,
! [Vnv: vTerm] :
( visNV(Vnv)
=> ( vreduce(vPred(vSucc(Vnv))) = vsomeTerm(Vnv) ) ) ).
tff('reduce-8',axiom,
! [Vnv: vTerm] :
( ( ~ visNV(Vnv)
& visSomeTerm(vreduce(vSucc(Vnv))) )
=> ( vreduce(vPred(vSucc(Vnv))) = vsomeTerm(vPred(vgetTerm(vreduce(vSucc(Vnv))))) ) ) ).
tff('reduce-9',axiom,
! [Vnv: vTerm] :
( ( ~ visNV(Vnv)
& ~ visSomeTerm(vreduce(vSucc(Vnv))) )
=> ( vreduce(vPred(vSucc(Vnv))) = vnoTerm ) ) ).
tff('reduce-10',axiom,
! [Vt1: vTerm] :
( ( ( Vt1 != vZero )
& ! [Vnv00: vTerm] : ( Vt1 != vSucc(Vnv00) )
& visSomeTerm(vreduce(Vt1)) )
=> ( vreduce(vPred(Vt1)) = vsomeTerm(vPred(vgetTerm(vreduce(Vt1)))) ) ) ).
tff('reduce-11',axiom,
! [Vt1: vTerm] :
( ( ( Vt1 != vZero )
& ! [Vnv00: vTerm] : ( Vt1 != vSucc(Vnv00) )
& ~ visSomeTerm(vreduce(Vt1)) )
=> ( vreduce(vPred(Vt1)) = vnoTerm ) ) ).
tff('reduce-12',axiom,
vreduce(vIszero(vZero)) = vsomeTerm(vTrue) ).
tff('reduce-13',axiom,
! [Vnv: vTerm] :
( visNV(Vnv)
=> ( vreduce(vIszero(vSucc(Vnv))) = vsomeTerm(vFalse) ) ) ).
tff('reduce-14',axiom,
! [Vnv: vTerm] :
( ( ~ visNV(Vnv)
& visSomeTerm(vreduce(vSucc(Vnv))) )
=> ( vreduce(vIszero(vSucc(Vnv))) = vsomeTerm(vIszero(vgetTerm(vreduce(vSucc(Vnv))))) ) ) ).
tff('reduce-15',axiom,
! [Vnv: vTerm] :
( ( ~ visNV(Vnv)
& ~ visSomeTerm(vreduce(vSucc(Vnv))) )
=> ( vreduce(vIszero(vSucc(Vnv))) = vnoTerm ) ) ).
tff('reduce-16',axiom,
! [Vt1: vTerm] :
( ( ( Vt1 != vZero )
& ! [Vnv00: vTerm] : ( Vt1 != vSucc(Vnv00) )
& visSomeTerm(vreduce(Vt1)) )
=> ( vreduce(vIszero(Vt1)) = vsomeTerm(vIszero(vgetTerm(vreduce(Vt1)))) ) ) ).
tff('reduce-17',axiom,
! [Vt1: vTerm] :
( ( ( Vt1 != vZero )
& ! [Vnv00: vTerm] : ( Vt1 != vSucc(Vnv00) )
& ~ visSomeTerm(vreduce(Vt1)) )
=> ( vreduce(vIszero(Vt1)) = vnoTerm ) ) ).
tff('reduce-18',axiom,
! [Vt1: vTerm,Vt2: vTerm] :
( ( visNV(Vt1)
& visNV(Vt2) )
=> ( vreduce(vPlus(Vt1,Vt2)) = vsomeTerm(vplusop(Vt1,Vt2)) ) ) ).
tff('reduce-19',axiom,
! [Vt1: vTerm,Vt2: vTerm] :
( ( visNV(Vt1)
& ~ visNV(Vt2)
& visSomeTerm(vreduce(Vt2)) )
=> ( vreduce(vPlus(Vt1,Vt2)) = vsomeTerm(vPlus(Vt1,vgetTerm(vreduce(Vt2)))) ) ) ).
tff('reduce-20',axiom,
! [Vt1: vTerm,Vt2: vTerm] :
( ( visNV(Vt1)
& ~ visNV(Vt2)
& ~ visSomeTerm(vreduce(Vt2)) )
=> ( vreduce(vPlus(Vt1,Vt2)) = vnoTerm ) ) ).
tff('reduce-21',axiom,
! [Vt1: vTerm,Vt2: vTerm] :
( ( ~ visNV(Vt1)
& visSomeTerm(vreduce(Vt1)) )
=> ( vreduce(vPlus(Vt1,Vt2)) = vsomeTerm(vPlus(vgetTerm(vreduce(Vt1)),Vt2)) ) ) ).
tff('reduce-22',axiom,
! [Vt1: vTerm,Vt2: vTerm] :
( ( ~ visNV(Vt1)
& ~ visSomeTerm(vreduce(Vt1)) )
=> ( vreduce(vPlus(Vt1,Vt2)) = vnoTerm ) ) ).
tff('reduce-23',axiom,
! [VwildcardName0: vTerm] :
( ( ! [Vt20: vTerm,Vt30: vTerm] : ( VwildcardName0 != vIfelse(vTrue,Vt20,Vt30) )
& ! [Vt20: vTerm,Vt30: vTerm] : ( VwildcardName0 != vIfelse(vFalse,Vt20,Vt30) )
& ! [Vt10: vTerm,Vt20: vTerm,Vt30: vTerm] : ( VwildcardName0 != vIfelse(Vt10,Vt20,Vt30) )
& ! [Vt10: vTerm] : ( VwildcardName0 != vSucc(Vt10) )
& ( VwildcardName0 != vPred(vZero) )
& ! [Vnv0: vTerm] : ( VwildcardName0 != vPred(vSucc(Vnv0)) )
& ! [Vt10: vTerm] : ( VwildcardName0 != vPred(Vt10) )
& ( VwildcardName0 != vIszero(vZero) )
& ! [Vnv0: vTerm] : ( VwildcardName0 != vIszero(vSucc(Vnv0)) )
& ! [Vt10: vTerm] : ( VwildcardName0 != vIszero(Vt10) )
& ! [Vt10: vTerm,Vt20: vTerm] : ( VwildcardName0 != vPlus(Vt10,Vt20) ) )
=> ( vreduce(VwildcardName0) = vnoTerm ) ) ).
tff('reduce-INV',axiom,
! [VTerm0: vTerm] :
( ? [Vt20: vTerm,Vt30: vTerm] :
( ( VTerm0 = vIfelse(vTrue,Vt20,Vt30) )
& ( vreduce(VTerm0) = vsomeTerm(Vt20) ) )
| ? [Vt21: vTerm,Vt31: vTerm] :
( ( VTerm0 = vIfelse(vFalse,Vt21,Vt31) )
& ( vreduce(VTerm0) = vsomeTerm(Vt31) ) )
| ? [Vt10: vTerm,Vt22: vTerm,Vt32: vTerm,Vot10: vOptTerm] :
( ! [Vt2010: vTerm,Vt3010: vTerm] :
( ( Vt10 != vTrue )
| ( Vt22 != Vt2010 )
| ( Vt32 != Vt3010 ) )
& ! [Vt2020: vTerm,Vt3020: vTerm] :
( ( Vt10 != vFalse )
| ( Vt22 != Vt2020 )
| ( Vt32 != Vt3020 ) )
& ( Vot10 = vreduce(Vt10) )
& visSomeTerm(Vot10)
& ( VTerm0 = vIfelse(Vt10,Vt22,Vt32) )
& ( vreduce(VTerm0) = vsomeTerm(vIfelse(vgetTerm(Vot10),Vt22,Vt32)) ) )
| ? [Vt11: vTerm,Vt23: vTerm,Vt33: vTerm,Vot11: vOptTerm] :
( ! [Vt2030: vTerm,Vt3030: vTerm] :
( ( Vt11 != vTrue )
| ( Vt23 != Vt2030 )
| ( Vt33 != Vt3030 ) )
& ! [Vt2040: vTerm,Vt3040: vTerm] :
( ( Vt11 != vFalse )
| ( Vt23 != Vt2040 )
| ( Vt33 != Vt3040 ) )
& ( Vot11 = vreduce(Vt11) )
& ~ visSomeTerm(Vot11)
& ( VTerm0 = vIfelse(Vt11,Vt23,Vt33) )
& ( vreduce(VTerm0) = vnoTerm ) )
| ? [Vt12: vTerm,Vot20: vOptTerm] :
( ( Vot20 = vreduce(Vt12) )
& visSomeTerm(Vot20)
& ( VTerm0 = vSucc(Vt12) )
& ( vreduce(VTerm0) = vsomeTerm(vSucc(vgetTerm(Vot20))) ) )
| ? [Vt13: vTerm,Vot21: vOptTerm] :
( ( Vot21 = vreduce(Vt13) )
& ~ visSomeTerm(Vot21)
& ( VTerm0 = vSucc(Vt13) )
& ( vreduce(VTerm0) = vnoTerm ) )
| ( ( VTerm0 = vPred(vZero) )
& ( vreduce(VTerm0) = vsomeTerm(vZero) ) )
| ? [Vnv0: vTerm] :
( visNV(Vnv0)
& ( VTerm0 = vPred(vSucc(Vnv0)) )
& ( vreduce(VTerm0) = vsomeTerm(Vnv0) ) )
| ? [Vnv1: vTerm,Vot22: vOptTerm] :
( ~ visNV(Vnv1)
& ( Vot22 = vreduce(vSucc(Vnv1)) )
& visSomeTerm(Vot22)
& ( VTerm0 = vPred(vSucc(Vnv1)) )
& ( vreduce(VTerm0) = vsomeTerm(vPred(vgetTerm(Vot22))) ) )
| ? [Vnv2: vTerm,Vot23: vOptTerm] :
( ~ visNV(Vnv2)
& ( Vot23 = vreduce(vSucc(Vnv2)) )
& ~ visSomeTerm(Vot23)
& ( VTerm0 = vPred(vSucc(Vnv2)) )
& ( vreduce(VTerm0) = vnoTerm ) )
| ? [Vt14: vTerm,Vot24: vOptTerm] :
( ( Vt14 != vZero )
& ! [Vnv000: vTerm] : ( Vt14 != vSucc(Vnv000) )
& ( Vot24 = vreduce(Vt14) )
& visSomeTerm(Vot24)
& ( VTerm0 = vPred(Vt14) )
& ( vreduce(VTerm0) = vsomeTerm(vPred(vgetTerm(Vot24))) ) )
| ? [Vt15: vTerm,Vot25: vOptTerm] :
( ( Vt15 != vZero )
& ! [Vnv010: vTerm] : ( Vt15 != vSucc(Vnv010) )
& ( Vot25 = vreduce(Vt15) )
& ~ visSomeTerm(Vot25)
& ( VTerm0 = vPred(Vt15) )
& ( vreduce(VTerm0) = vnoTerm ) )
| ( ( VTerm0 = vIszero(vZero) )
& ( vreduce(VTerm0) = vsomeTerm(vTrue) ) )
| ? [Vnv3: vTerm] :
( visNV(Vnv3)
& ( VTerm0 = vIszero(vSucc(Vnv3)) )
& ( vreduce(VTerm0) = vsomeTerm(vFalse) ) )
| ? [Vnv4: vTerm,Vot26: vOptTerm] :
( ~ visNV(Vnv4)
& ( Vot26 = vreduce(vSucc(Vnv4)) )
& visSomeTerm(Vot26)
& ( VTerm0 = vIszero(vSucc(Vnv4)) )
& ( vreduce(VTerm0) = vsomeTerm(vIszero(vgetTerm(Vot26))) ) )
| ? [Vnv5: vTerm,Vot27: vOptTerm] :
( ~ visNV(Vnv5)
& ( Vot27 = vreduce(vSucc(Vnv5)) )
& ~ visSomeTerm(Vot27)
& ( VTerm0 = vIszero(vSucc(Vnv5)) )
& ( vreduce(VTerm0) = vnoTerm ) )
| ? [Vt16: vTerm,Vot28: vOptTerm] :
( ( Vt16 != vZero )
& ! [Vnv020: vTerm] : ( Vt16 != vSucc(Vnv020) )
& ( Vot28 = vreduce(Vt16) )
& visSomeTerm(Vot28)
& ( VTerm0 = vIszero(Vt16) )
& ( vreduce(VTerm0) = vsomeTerm(vIszero(vgetTerm(Vot28))) ) )
| ? [Vt17: vTerm,Vot29: vOptTerm] :
( ( Vt17 != vZero )
& ! [Vnv030: vTerm] : ( Vt17 != vSucc(Vnv030) )
& ( Vot29 = vreduce(Vt17) )
& ~ visSomeTerm(Vot29)
& ( VTerm0 = vIszero(Vt17) )
& ( vreduce(VTerm0) = vnoTerm ) )
| ? [Vt18: vTerm,Vt24: vTerm] :
( visNV(Vt18)
& visNV(Vt24)
& ( VTerm0 = vPlus(Vt18,Vt24) )
& ( vreduce(VTerm0) = vsomeTerm(vplusop(Vt18,Vt24)) ) )
| ? [Vt19: vTerm,Vt25: vTerm,Vot210: vOptTerm] :
( visNV(Vt19)
& ~ visNV(Vt25)
& ( Vot210 = vreduce(Vt25) )
& visSomeTerm(Vot210)
& ( VTerm0 = vPlus(Vt19,Vt25) )
& ( vreduce(VTerm0) = vsomeTerm(vPlus(Vt19,vgetTerm(Vot210))) ) )
| ? [Vt110: vTerm,Vt26: vTerm,Vot211: vOptTerm] :
( visNV(Vt110)
& ~ visNV(Vt26)
& ( Vot211 = vreduce(Vt26) )
& ~ visSomeTerm(Vot211)
& ( VTerm0 = vPlus(Vt110,Vt26) )
& ( vreduce(VTerm0) = vnoTerm ) )
| ? [Vt111: vTerm,Vt27: vTerm,Vot12: vOptTerm] :
( ~ visNV(Vt111)
& ( Vot12 = vreduce(Vt111) )
& visSomeTerm(Vot12)
& ( VTerm0 = vPlus(Vt111,Vt27) )
& ( vreduce(VTerm0) = vsomeTerm(vPlus(vgetTerm(Vot12),Vt27)) ) )
| ? [Vt112: vTerm,Vt28: vTerm,Vot13: vOptTerm] :
( ~ visNV(Vt112)
& ( Vot13 = vreduce(Vt112) )
& ~ visSomeTerm(Vot13)
& ( VTerm0 = vPlus(Vt112,Vt28) )
& ( vreduce(VTerm0) = vnoTerm ) )
| ? [VwildcardName00: vTerm] :
( ! [Vt2050: vTerm,Vt3050: vTerm] : ( VwildcardName00 != vIfelse(vTrue,Vt2050,Vt3050) )
& ! [Vt2060: vTerm,Vt3060: vTerm] : ( VwildcardName00 != vIfelse(vFalse,Vt2060,Vt3060) )
& ! [Vt1000: vTerm,Vt2070: vTerm,Vt3070: vTerm] : ( VwildcardName00 != vIfelse(Vt1000,Vt2070,Vt3070) )
& ! [Vt1010: vTerm] : ( VwildcardName00 != vSucc(Vt1010) )
& ( VwildcardName00 != vPred(vZero) )
& ! [Vnv040: vTerm] : ( VwildcardName00 != vPred(vSucc(Vnv040)) )
& ! [Vt1020: vTerm] : ( VwildcardName00 != vPred(Vt1020) )
& ( VwildcardName00 != vIszero(vZero) )
& ! [Vnv050: vTerm] : ( VwildcardName00 != vIszero(vSucc(Vnv050)) )
& ! [Vt1030: vTerm] : ( VwildcardName00 != vIszero(Vt1030) )
& ! [Vt1040: vTerm,Vt2080: vTerm] : ( VwildcardName00 != vPlus(Vt1040,Vt2080) )
& ( VTerm0 = VwildcardName00 )
& ( vreduce(VTerm0) = vnoTerm ) ) ) ).
tff('Ttrue',axiom,
vptchecksimple(vTrue,vB) ).
tff('Tfalse',axiom,
vptchecksimple(vFalse,vB) ).
tff('Tif',axiom,
! [Vt1: vTerm,Vt2: vTerm,VT: vTy,Vt3: vTerm] :
( ( vptchecksimple(Vt1,vB)
& vptchecksimple(Vt2,VT)
& vptchecksimple(Vt3,VT) )
=> vptchecksimple(vIfelse(Vt1,Vt2,Vt3),VT) ) ).
tff('Tif_inv1',axiom,
! [Vt1: vTerm,Vt2: vTerm,Vt3: vTerm,VT: vTy] :
( vptchecksimple(vIfelse(Vt1,Vt2,Vt3),VT)
=> vptchecksimple(Vt1,vB) ) ).
tff('Tif_inv2',axiom,
! [Vt1: vTerm,Vt2: vTerm,Vt3: vTerm,VT: vTy] :
( vptchecksimple(vIfelse(Vt1,Vt2,Vt3),VT)
=> vptchecksimple(Vt2,VT) ) ).
tff('Tif_inv3',axiom,
! [Vt1: vTerm,Vt2: vTerm,Vt3: vTerm,VT: vTy] :
( vptchecksimple(vIfelse(Vt1,Vt2,Vt3),VT)
=> vptchecksimple(Vt3,VT) ) ).
tff('TZero',axiom,
vptchecksimple(vZero,vNat) ).
tff('TZero_inv',axiom,
! [VT: vTy] :
( vptchecksimple(vZero,VT)
=> ( VT = vNat ) ) ).
tff('TSucc',axiom,
! [Vt1: vTerm] :
( vptchecksimple(Vt1,vNat)
=> vptchecksimple(vSucc(Vt1),vNat) ) ).
tff('TSucc_inv1',axiom,
! [Vt1: vTerm,VT: vTy] :
( vptchecksimple(vSucc(Vt1),VT)
=> ( VT = vNat ) ) ).
tff('TSucc_inv2',axiom,
! [Vt1: vTerm] :
( vptchecksimple(vSucc(Vt1),vNat)
=> vptchecksimple(Vt1,vNat) ) ).
tff('TPred',axiom,
! [Vt1: vTerm] :
( vptchecksimple(Vt1,vNat)
=> vptchecksimple(vPred(Vt1),vNat) ) ).
tff('TPred_inv1',axiom,
! [Vt1: vTerm] :
( vptchecksimple(vPred(Vt1),vNat)
=> vptchecksimple(Vt1,vNat) ) ).
tff('TPred_inv2',axiom,
! [Vt1: vTerm,VT: vTy] :
( vptchecksimple(vPred(Vt1),VT)
=> ( VT = vNat ) ) ).
tff('Tiszero',axiom,
! [Vt1: vTerm] :
( vptchecksimple(Vt1,vNat)
=> vptchecksimple(vIszero(Vt1),vB) ) ).
tff('Tiszero_inv1',axiom,
! [Vt1: vTerm] :
( vptchecksimple(vIszero(Vt1),vB)
=> vptchecksimple(Vt1,vNat) ) ).
tff('Tiszero_inv2',axiom,
! [Vt1: vTerm,VT: vTy] :
( vptchecksimple(vIszero(Vt1),VT)
=> ( VT = vB ) ) ).
tff('TPlus',axiom,
! [Vt1: vTerm,Vt2: vTerm] :
( ( vptchecksimple(Vt1,vNat)
& vptchecksimple(Vt2,vNat) )
=> vptchecksimple(vPlus(Vt1,Vt2),vNat) ) ).
tff('TPlus_inv0',axiom,
! [Vt1: vTerm,Vt2: vTerm,VT: vTy] :
( vptchecksimple(vPlus(Vt1,Vt2),VT)
=> ( VT = vNat ) ) ).
tff('TPlus_inv1',axiom,
! [Vt1: vTerm,Vt2: vTerm] :
( vptchecksimple(vPlus(Vt1,Vt2),vNat)
=> vptchecksimple(Vt1,vNat) ) ).
tff('TPlus_inv2',axiom,
! [Vt1: vTerm,Vt2: vTerm] :
( vptchecksimple(vPlus(Vt1,Vt2),vNat)
=> vptchecksimple(Vt2,vNat) ) ).
tff('Preservation-Pred-IH0',axiom,
! [VT: vTy,Vtres: vTerm] :
( ( vptchecksimple(vt1,VT)
& ( vreduce(vt1) = vsomeTerm(Vtres) ) )
=> vptchecksimple(Vtres,VT) ) ).
tff(isNVisNat,axiom,
! [Vt: vTerm] :
( visNV(Vt)
=> vptchecksimple(Vt,vNat) ) ).
tff('Preservation-Pred-Succ-isNV-True',conjecture,
! [Vnv: vTerm,VT: vTy,Vtres: vTerm] :
( ( visNV(Vnv)
& ( vt1 != vZero )
& ( vt1 = vSucc(Vnv) )
& vptchecksimple(vPred(vt1),VT)
& ( vreduce(vPred(vt1)) = vsomeTerm(Vtres) ) )
=> vptchecksimple(Vtres,VT) ) ).
%------------------------------------------------------------------------------