YES Problem 1: (VAR v_NonEmpty:S K:S L:S Lp:S S:S Sp:S T:S Tp:S X:S Xp:S Y:S Z:S) (RULES and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ) Problem 1: Innermost Equivalent Processor: -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) -> The term rewriting system is non-overlaping or locally confluent overlay system. Therefore, innermost termination implies termination. Problem 1: Dependency Pairs Processor: -> Pairs: EQ(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> AND(eq(T:S,Tp:S),eq(S:S,Sp:S)) EQ(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> EQ(S:S,Sp:S) EQ(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> EQ(T:S,Tp:S) EQ(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> AND(eq(T:S,Tp:S),eq(L:S,Lp:S)) EQ(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> EQ(L:S,Lp:S) EQ(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> EQ(T:S,Tp:S) EQ(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> AND(eq(T:S,Tp:S),eq(X:S,Xp:S)) EQ(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> EQ(T:S,Tp:S) EQ(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> EQ(X:S,Xp:S) EQ(var(L:S),var(Lp:S)) -> EQ(L:S,Lp:S) REN(var(L:S),var(K:S),var(Lp:S)) -> EQ(L:S,Lp:S) REN(var(L:S),var(K:S),var(Lp:S)) -> IF(eq(L:S,Lp:S),var(K:S),var(Lp:S)) REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,S:S) REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,T:S) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S)) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) Problem 1: SCC Processor: -> Pairs: EQ(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> AND(eq(T:S,Tp:S),eq(S:S,Sp:S)) EQ(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> EQ(S:S,Sp:S) EQ(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> EQ(T:S,Tp:S) EQ(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> AND(eq(T:S,Tp:S),eq(L:S,Lp:S)) EQ(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> EQ(L:S,Lp:S) EQ(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> EQ(T:S,Tp:S) EQ(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> AND(eq(T:S,Tp:S),eq(X:S,Xp:S)) EQ(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> EQ(T:S,Tp:S) EQ(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> EQ(X:S,Xp:S) EQ(var(L:S),var(Lp:S)) -> EQ(L:S,Lp:S) REN(var(L:S),var(K:S),var(Lp:S)) -> EQ(L:S,Lp:S) REN(var(L:S),var(K:S),var(Lp:S)) -> IF(eq(L:S,Lp:S),var(K:S),var(Lp:S)) REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,S:S) REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,T:S) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S)) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: EQ(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> EQ(S:S,Sp:S) EQ(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> EQ(T:S,Tp:S) EQ(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> EQ(L:S,Lp:S) EQ(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> EQ(T:S,Tp:S) EQ(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> EQ(T:S,Tp:S) EQ(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> EQ(X:S,Xp:S) EQ(var(L:S),var(Lp:S)) -> EQ(L:S,Lp:S) ->->-> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->->Cycle: ->->-> Pairs: REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,S:S) REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,T:S) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S)) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) ->->-> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) The problem is decomposed in 2 subproblems. Problem 1.1: Subterm Processor: -> Pairs: EQ(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> EQ(S:S,Sp:S) EQ(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> EQ(T:S,Tp:S) EQ(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> EQ(L:S,Lp:S) EQ(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> EQ(T:S,Tp:S) EQ(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> EQ(T:S,Tp:S) EQ(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> EQ(X:S,Xp:S) EQ(var(L:S),var(Lp:S)) -> EQ(L:S,Lp:S) -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Projection: pi(EQ) = 1 Problem 1.1: SCC Processor: -> Pairs: Empty -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Strongly Connected Components: There is no strongly connected component The problem is finite. Problem 1.2: Reduction Pairs Processor: -> Pairs: REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,S:S) REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,T:S) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S)) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) -> Usable rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [and](X1,X2) = 2 [eq](X1,X2) = 2 [if](X1,X2,X3) = 2.X3 [ren](X1,X2,X3) = X3 [apply](X1,X2) = 2.X1 + 2.X2 + 2 [cons](X1,X2) = 1 [fSNonEmpty] = 0 [false] = 2 [lambda](X1,X2) = X1 + X2 + 2 [nil] = 2 [true] = 0 [var](X) = 0 [AND](X1,X2) = 0 [EQ](X1,X2) = 0 [IF](X1,X2,X3) = 0 [REN](X1,X2,X3) = X1 + 2.X2 + 2.X3 Problem 1.2: SCC Processor: -> Pairs: REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,T:S) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S)) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,T:S) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S)) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) ->->-> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) Problem 1.2: Reduction Pairs Processor: -> Pairs: REN(X:S,Y:S,apply(T:S,S:S)) -> REN(X:S,Y:S,T:S) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S)) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) -> Usable rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [and](X1,X2) = X2 [eq](X1,X2) = 2 [if](X1,X2,X3) = 2.X2 [ren](X1,X2,X3) = X3 [apply](X1,X2) = 2.X1 + 2 [cons](X1,X2) = 0 [fSNonEmpty] = 0 [false] = 2 [lambda](X1,X2) = 2.X1 + X2 + 1 [nil] = 0 [true] = 2 [var](X) = 0 [AND](X1,X2) = 0 [EQ](X1,X2) = 0 [IF](X1,X2,X3) = 0 [REN](X1,X2,X3) = 2.X1 + 2.X2 + 2.X3 Problem 1.2: SCC Processor: -> Pairs: REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S)) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S)) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) ->->-> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) Problem 1.2: Reduction Pairs Processor: -> Pairs: REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S)) REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) -> Usable rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Interpretation type: Linear ->Coefficients: Natural Numbers ->Dimension: 1 ->Bound: 2 ->Interpretation: [and](X1,X2) = 2 [eq](X1,X2) = 2 [if](X1,X2,X3) = 0 [ren](X1,X2,X3) = X3 [apply](X1,X2) = 2.X1 + X2 + 2 [cons](X1,X2) = 0 [fSNonEmpty] = 0 [false] = 0 [lambda](X1,X2) = X1 + 2.X2 + 2 [nil] = 2 [true] = 2 [var](X) = 0 [AND](X1,X2) = 0 [EQ](X1,X2) = 0 [IF](X1,X2,X3) = 0 [REN](X1,X2,X3) = 2.X1 + 2.X2 + 2.X3 Problem 1.2: SCC Processor: -> Pairs: REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Strongly Connected Components: ->->Cycle: ->->-> Pairs: REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) ->->-> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) Problem 1.2: Subterm Processor: -> Pairs: REN(X:S,Y:S,lambda(Z:S,T:S)) -> REN(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S) -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Projection: pi(REN) = 3 Problem 1.2: SCC Processor: -> Pairs: Empty -> Rules: and(ffalse,ffalse) -> ffalse and(ffalse,ttrue) -> ffalse and(ttrue,ffalse) -> ffalse and(ttrue,ttrue) -> ttrue eq(apply(T:S,S:S),apply(Tp:S,Sp:S)) -> and(eq(T:S,Tp:S),eq(S:S,Sp:S)) eq(apply(T:S,S:S),lambda(X:S,Tp:S)) -> ffalse eq(apply(T:S,S:S),var(L:S)) -> ffalse eq(cons(T:S,L:S),cons(Tp:S,Lp:S)) -> and(eq(T:S,Tp:S),eq(L:S,Lp:S)) eq(cons(T:S,L:S),nil) -> ffalse eq(lambda(X:S,T:S),apply(Tp:S,Sp:S)) -> ffalse eq(lambda(X:S,T:S),lambda(Xp:S,Tp:S)) -> and(eq(T:S,Tp:S),eq(X:S,Xp:S)) eq(lambda(X:S,T:S),var(L:S)) -> ffalse eq(nil,cons(T:S,L:S)) -> ffalse eq(nil,nil) -> ttrue eq(var(L:S),apply(T:S,S:S)) -> ffalse eq(var(L:S),lambda(X:S,T:S)) -> ffalse eq(var(L:S),var(Lp:S)) -> eq(L:S,Lp:S) if(ffalse,var(K:S),var(L:S)) -> var(L:S) if(ttrue,var(K:S),var(L:S)) -> var(K:S) ren(var(L:S),var(K:S),var(Lp:S)) -> if(eq(L:S,Lp:S),var(K:S),var(Lp:S)) ren(X:S,Y:S,apply(T:S,S:S)) -> apply(ren(X:S,Y:S,T:S),ren(X:S,Y:S,S:S)) ren(X:S,Y:S,lambda(Z:S,T:S)) -> lambda(var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),ren(X:S,Y:S,ren(Z:S,var(cons(X:S,cons(Y:S,cons(lambda(Z:S,T:S),nil)))),T:S))) ->Strongly Connected Components: There is no strongly connected component The problem is finite.