0.11/0.12 % Problem : theBenchmark.p : TPTP v0.0.0. Released v0.0.0. 0.11/0.12 % Command : parallel-twee %s --tstp --conditional-encoding if --smaller --drop-non-horn --give-up-on-saturation --explain-encoding --formal-proof 0.13/0.33 % Computer : n021.cluster.edu 0.13/0.33 % Model : x86_64 x86_64 0.13/0.33 % CPU : Intel(R) Xeon(R) CPU E5-2620 v4 @ 2.10GHz 0.13/0.33 % Memory : 8042.1875MB 0.13/0.33 % OS : Linux 3.10.0-693.el7.x86_64 0.13/0.34 % CPULimit : 1200 0.13/0.34 % WCLimit : 120 0.13/0.34 % DateTime : Tue Jul 13 11:33:10 EDT 2021 0.13/0.34 % CPUTime : 0.20/0.59 % SZS status Theorem 0.20/0.59 1.97/0.59 % SZS output start Proof 1.97/0.59 Take the following subset of the input axioms: 1.97/0.60 fof('DIFF-abs-app', axiom, ![VVar0, VExp0, VExp1, VExp2, VTyp0]: vapp(VExp1, VExp2)!=vabs(VVar0, VTyp0, VExp0)). 1.97/0.60 fof('DIFF-empty-bind', axiom, ![VVar0, VCtx0, VTyp0]: vempty!=vbind(VVar0, VTyp0, VCtx0)). 1.97/0.60 fof('DIFF-noExp-someExp', axiom, ![VExp0]: vnoExp!=vsomeExp(VExp0)). 1.97/0.60 fof('DIFF-noType-someType', axiom, ![VTyp0]: vsomeType(VTyp0)!=vnoType). 1.97/0.60 fof('DIFF-var-abs', axiom, ![VVar0, VExp0, VTyp0, VVar1]: vvar(VVar0)!=vabs(VVar1, VTyp0, VExp0)). 1.97/0.60 fof('DIFF-var-app', axiom, ![VVar0, VExp0, VExp1]: vapp(VExp0, VExp1)!=vvar(VVar0)). 1.97/0.60 fof('fresh-free-2', conjecture, ![Vx, Ve1, Ve, Vfresh]: (Vfresh=vgensym(vapp(vapp(Ve, Ve1), vvar(Vx))) => ~visFreeVar(Vfresh, Ve1))). 1.97/0.60 fof('fresh-unequal-var-3', axiom, ![Vx, Ve1, Ve, Vfresh]: (Vfresh=vgensym(vapp(vapp(Ve, Ve1), vvar(Vx))) => Vx!=Vfresh)). 1.97/0.60 fof('gensym-is-fresh', axiom, ![Ve, Vv]: (vgensym(Ve)=Vv => ~visFreeVar(Vv, Ve))). 1.97/0.60 fof('lookup-INV', axiom, ![VVar0, VCtx0, RESULT]: ((?[Vx]: (VVar0=Vx & (vempty=VCtx0 & vnoType=RESULT)) | (?[Vx, VC, Vy, VTy]: (VCtx0=vbind(Vy, VTy, VC) & (RESULT=vsomeType(VTy) & (Vy=Vx & Vx=VVar0))) | ?[Vx, VC, Vy, VTy]: (VCtx0=vbind(Vy, VTy, VC) & (vlookup(Vx, VC)=RESULT & (Vy!=Vx & Vx=VVar0))))) <= RESULT=vlookup(VVar0, VCtx0))). 1.97/0.60 fof('reduce-INV', axiom, ![RESULT, VExp0]: (RESULT=vreduce(VExp0) => (?[Vx, VS, Ve]: (VExp0=vabs(Vx, VS, Ve) & RESULT=vnoExp) | (?[Vx, VS, Ve1, Ve2red, Ve2]: (vapp(vabs(Vx, VS, Ve1), Ve2)=VExp0 & (vnoExp=RESULT & (~visValue(Ve2) & (~visSomeExp(Ve2red) & vreduce(Ve2)=Ve2red)))) | (?[Ve1, Ve2, Ve1red]: (VExp0=vapp(Ve1, Ve2) & (Ve1red=vreduce(Ve1) & (RESULT=vsomeExp(vapp(vgetSomeExp(Ve1red), Ve2)) & (visSomeExp(Ve1red) & ![VVx0, VVS0, VVe10]: Ve1!=vabs(VVx0, VVS0, VVe10))))) | (?[Ve1, Ve2, Ve1red]: (![VVx0, VVS0, VVe10]: Ve1!=vabs(VVx0, VVS0, VVe10) & (vnoExp=RESULT & (~visSomeExp(Ve1red) & (vreduce(Ve1)=Ve1red & VExp0=vapp(Ve1, Ve2))))) | (?[Vx, VS, Ve1, Ve2red, Ve2]: (vapp(vabs(Vx, VS, Ve1), Ve2)=VExp0 & (Ve2red=vreduce(Ve2) & (visValue(Ve2) & (vsomeExp(vsubst(Vx, Ve2, Ve1))=RESULT & ~visSomeExp(Ve2red))))) | (?[Vx, VS, Ve1, Ve2red, Ve2]: (vapp(vabs(Vx, VS, Ve1), Ve2)=VExp0 & (vreduce(Ve2)=Ve2red & (RESULT=vsomeExp(vapp(vabs(Vx, VS, Ve1), vgetSomeExp(Ve2red))) & visSomeExp(Ve2red)))) | ?[Vx]: (vnoExp=RESULT & vvar(Vx)=VExp0))))))))). 1.97/0.60 fof('subst-INV', axiom, ![VVar0, RESULT, VExp0, VExp1]: ((?[Vx, Vy, Ve1, Ve, VT, Vfresh]: (VVar0=Vx & (visFreeVar(Vy, Ve) & (vsubst(Vx, Ve, vabs(Vfresh, VT, vsubst(Vy, vvar(Vfresh), Ve1)))=RESULT & (vgensym(vapp(vapp(Ve, Ve1), vvar(Vx)))=Vfresh & (Vy!=Vx & (vabs(Vy, VT, Ve1)=VExp1 & Ve=VExp0)))))) | (?[Vx, Vy, Ve1, Ve, VT]: (~visFreeVar(Vy, Ve) & (vabs(Vy, VT, vsubst(Vx, Ve, Ve1))=RESULT & (Vy!=Vx & (VExp1=vabs(Vy, VT, Ve1) & (VExp0=Ve & VVar0=Vx))))) | (?[Vx, Vy, Ve1, Ve, VT]: (VExp0=Ve & (VExp1=vabs(Vy, VT, Ve1) & (vabs(Vy, VT, Ve1)=RESULT & (Vy=Vx & VVar0=Vx)))) | (?[Vx, Ve1, Ve2, Ve]: (Vx=VVar0 & (VExp1=vapp(Ve1, Ve2) & (vapp(vsubst(Vx, Ve, Ve1), vsubst(Vx, Ve, Ve2))=RESULT & Ve=VExp0))) | (?[Vx, Vy, Ve]: (vvar(Vy)=RESULT & (Vx!=Vy & (VExp1=vvar(Vy) & (VExp0=Ve & VVar0=Vx)))) | ?[Vx, Vy, Ve]: (Vx=VVar0 & (Ve=VExp0 & (vvar(Vy)=VExp1 & (Vx=Vy & Ve=RESULT))))))))) <= RESULT=vsubst(VVar0, VExp0, VExp1))). 1.97/0.60 fof(isFreeVar1, axiom, ![VVar0, Vx, VExp0, Ve, VT, Vv]: ((vabs(Vx, VT, Ve)=VExp0 & VVar0=Vv) => ((visFreeVar(VVar0, VExp0) => (visFreeVar(Vv, Ve) & Vx!=Vv)) & (visFreeVar(VVar0, VExp0) <= (visFreeVar(Vv, Ve) & Vx!=Vv))))). 1.97/0.60 fof(isFreeVar2, axiom, ![VVar0, Ve1, Ve2, VExp0, Vv]: ((VVar0=Vv & VExp0=vapp(Ve1, Ve2)) => (((visFreeVar(Vv, Ve1) | visFreeVar(Vv, Ve2)) <= visFreeVar(VVar0, VExp0)) & (visFreeVar(VVar0, VExp0) <= (visFreeVar(Vv, Ve1) | visFreeVar(Vv, Ve2)))))). 1.97/0.60 fof(isSomeExp0, axiom, ![VOptExp0]: (VOptExp0=vnoExp => ~visSomeExp(VOptExp0))). 1.97/0.60 fof(isSomeType0, axiom, ![VOptTyp0]: (vnoType=VOptTyp0 => ~visSomeType(VOptTyp0))). 1.97/0.60 fof(isValue1, axiom, ![Vx, VExp0]: (~visValue(VExp0) <= VExp0=vvar(Vx))). 1.97/0.60 fof(isValue2, axiom, ![Ve1, Ve2, VExp0]: (~visValue(VExp0) <= VExp0=vapp(Ve1, Ve2))). 1.97/0.60 1.97/0.60 Now clausify the problem and encode Horn clauses using encoding 3 of 1.97/0.60 http://www.cse.chalmers.se/~nicsma/papers/horn.pdf. 1.97/0.60 We repeatedly replace C & s=t => u=v by the two clauses: 1.97/0.60 fresh(y, y, x1...xn) = u 1.97/0.60 C => fresh(s, t, x1...xn) = v 1.97/0.60 where fresh is a fresh function symbol and x1..xn are the free 1.97/0.60 variables of u and v. 1.97/0.60 A predicate p(X) is encoded as p(X)=true (this is sound, because the 1.97/0.60 input problem has no model of domain size 1). 1.97/0.60 1.97/0.60 The encoding turns the above axioms into the following unit equations and goals: 1.97/0.60 1.97/0.60 Axiom 1 (fresh-free-2_1): visFreeVar(vfresh, ve1) = true2. 1.97/0.60 Axiom 2 (isFreeVar2_1): fresh70(X, X, Y, Z) = true2. 1.97/0.60 Axiom 3 (isFreeVar2_2): fresh68(X, X, Y, Z) = true2. 1.97/0.60 Axiom 4 (fresh-free-2): vfresh = vgensym(vapp(vapp(ve, ve1), vvar(vx))). 1.97/0.60 Axiom 5 (isFreeVar2_1): fresh71(X, X, Y, Z, W, V) = visFreeVar(W, Y). 1.97/0.60 Axiom 6 (isFreeVar2_2): fresh69(X, X, Y, Z, W, V) = visFreeVar(W, Y). 1.97/0.60 Axiom 7 (isFreeVar2_1): fresh71(visFreeVar(X, Y), true2, Z, Y, X, W) = fresh70(Z, vapp(Y, W), Z, X). 1.97/0.60 Axiom 8 (isFreeVar2_2): fresh69(visFreeVar(X, Y), true2, Z, W, X, Y) = fresh68(Z, vapp(W, Y), Z, X). 1.97/0.60 1.97/0.60 Goal 1 (gensym-is-fresh): tuple2(vgensym(X), visFreeVar(Y, X)) = tuple2(Y, true2). 1.97/0.60 The goal is true when: 1.97/0.60 X = vapp(vapp(ve, ve1), vvar(vx)) 1.97/0.60 Y = vfresh 1.97/0.60 1.97/0.60 Proof: 1.97/0.60 tuple2(vgensym(vapp(vapp(ve, ve1), vvar(vx))), visFreeVar(vfresh, vapp(vapp(ve, ve1), vvar(vx)))) 1.97/0.60 = { by axiom 4 (fresh-free-2) R->L } 1.97/0.60 tuple2(vfresh, visFreeVar(vfresh, vapp(vapp(ve, ve1), vvar(vx)))) 1.97/0.60 = { by axiom 5 (isFreeVar2_1) R->L } 1.97/0.60 tuple2(vfresh, fresh71(true2, true2, vapp(vapp(ve, ve1), vvar(vx)), vapp(ve, ve1), vfresh, vvar(vx))) 1.97/0.60 = { by axiom 3 (isFreeVar2_2) R->L } 1.97/0.60 tuple2(vfresh, fresh71(fresh68(vapp(ve, ve1), vapp(ve, ve1), vapp(ve, ve1), vfresh), true2, vapp(vapp(ve, ve1), vvar(vx)), vapp(ve, ve1), vfresh, vvar(vx))) 1.97/0.60 = { by axiom 8 (isFreeVar2_2) R->L } 1.97/0.60 tuple2(vfresh, fresh71(fresh69(visFreeVar(vfresh, ve1), true2, vapp(ve, ve1), ve, vfresh, ve1), true2, vapp(vapp(ve, ve1), vvar(vx)), vapp(ve, ve1), vfresh, vvar(vx))) 1.97/0.60 = { by axiom 1 (fresh-free-2_1) } 1.97/0.60 tuple2(vfresh, fresh71(fresh69(true2, true2, vapp(ve, ve1), ve, vfresh, ve1), true2, vapp(vapp(ve, ve1), vvar(vx)), vapp(ve, ve1), vfresh, vvar(vx))) 1.97/0.60 = { by axiom 6 (isFreeVar2_2) } 1.97/0.60 tuple2(vfresh, fresh71(visFreeVar(vfresh, vapp(ve, ve1)), true2, vapp(vapp(ve, ve1), vvar(vx)), vapp(ve, ve1), vfresh, vvar(vx))) 1.97/0.60 = { by axiom 7 (isFreeVar2_1) } 1.97/0.60 tuple2(vfresh, fresh70(vapp(vapp(ve, ve1), vvar(vx)), vapp(vapp(ve, ve1), vvar(vx)), vapp(vapp(ve, ve1), vvar(vx)), vfresh)) 1.97/0.60 = { by axiom 2 (isFreeVar2_1) } 1.97/0.60 tuple2(vfresh, true2) 1.97/0.60 % SZS output end Proof 1.97/0.60 1.97/0.60 RESULT: Theorem (the conjecture is true). 1.97/0.60 EOF