YES

Problem:
 ap(ap(map(),f),xs) -> ap(ap(ap(if(),ap(isEmpty(),xs)),f),xs)
 ap(ap(ap(if(),true()),f),xs) -> nil()
 ap(ap(ap(if(),false()),f),xs) ->
 ap(ap(cons(),ap(f,ap(last(),xs))),ap(ap(map(),f),ap(dropLast(),xs)))
 ap(isEmpty(),nil()) -> true()
 ap(isEmpty(),ap(ap(cons(),x),xs)) -> false()
 ap(last(),ap(ap(cons(),x),nil())) -> x
 ap(last(),ap(ap(cons(),x),ap(ap(cons(),y),ys))) -> ap(last(),ap(ap(cons(),y),ys))
 ap(dropLast(),nil()) -> nil()
 ap(dropLast(),ap(ap(cons(),x),nil())) -> nil()
 ap(dropLast(),ap(ap(cons(),x),ap(ap(cons(),y),ys))) ->
 ap(ap(cons(),x),ap(dropLast(),ap(ap(cons(),y),ys)))

Proof:
 Uncurry Processor:
  map2(f,xs) -> if3(isEmpty1(xs),f,xs)
  if3(true(),f,xs) -> nil()
  if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
  isEmpty1(nil()) -> true()
  isEmpty1(cons2(x,xs)) -> false()
  last1(cons2(x,nil())) -> x
  last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
  dropLast1(nil()) -> nil()
  dropLast1(cons2(x,nil())) -> nil()
  dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
  ap(map1(x6),x7) -> map2(x6,x7)
  ap(map(),x7) -> map1(x7)
  ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
  ap(if1(x6),x7) -> if2(x6,x7)
  ap(if(),x7) -> if1(x7)
  ap(isEmpty(),x7) -> isEmpty1(x7)
  ap(cons1(x6),x7) -> cons2(x6,x7)
  ap(cons(),x7) -> cons1(x7)
  ap(last(),x7) -> last1(x7)
  ap(dropLast(),x7) -> dropLast1(x7)
  DP Processor:
   DPs:
    map{2,#}(f,xs) -> isEmpty{1,#}(xs)
    map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs)
    if{3,#}(false(),f,xs) -> dropLast{1,#}(xs)
    if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs))
    if{3,#}(false(),f,xs) -> last{1,#}(xs)
    if{3,#}(false(),f,xs) -> ap#(f,last1(xs))
    last{1,#}(cons2(x,cons2(y,ys))) -> last{1,#}(cons2(y,ys))
    dropLast{1,#}(cons2(x,cons2(y,ys))) -> dropLast{1,#}(cons2(y,ys))
    ap#(map1(x6),x7) -> map{2,#}(x6,x7)
    ap#(if2(x6,x5),x7) -> if{3,#}(x6,x5,x7)
    ap#(isEmpty(),x7) -> isEmpty{1,#}(x7)
    ap#(last(),x7) -> last{1,#}(x7)
    ap#(dropLast(),x7) -> dropLast{1,#}(x7)
   TRS:
    map2(f,xs) -> if3(isEmpty1(xs),f,xs)
    if3(true(),f,xs) -> nil()
    if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
    isEmpty1(nil()) -> true()
    isEmpty1(cons2(x,xs)) -> false()
    last1(cons2(x,nil())) -> x
    last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
    dropLast1(nil()) -> nil()
    dropLast1(cons2(x,nil())) -> nil()
    dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
    ap(map1(x6),x7) -> map2(x6,x7)
    ap(map(),x7) -> map1(x7)
    ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
    ap(if1(x6),x7) -> if2(x6,x7)
    ap(if(),x7) -> if1(x7)
    ap(isEmpty(),x7) -> isEmpty1(x7)
    ap(cons1(x6),x7) -> cons2(x6,x7)
    ap(cons(),x7) -> cons1(x7)
    ap(last(),x7) -> last1(x7)
    ap(dropLast(),x7) -> dropLast1(x7)
   TDG Processor:
    DPs:
     map{2,#}(f,xs) -> isEmpty{1,#}(xs)
     map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs)
     if{3,#}(false(),f,xs) -> dropLast{1,#}(xs)
     if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs))
     if{3,#}(false(),f,xs) -> last{1,#}(xs)
     if{3,#}(false(),f,xs) -> ap#(f,last1(xs))
     last{1,#}(cons2(x,cons2(y,ys))) -> last{1,#}(cons2(y,ys))
     dropLast{1,#}(cons2(x,cons2(y,ys))) -> dropLast{1,#}(cons2(y,ys))
     ap#(map1(x6),x7) -> map{2,#}(x6,x7)
     ap#(if2(x6,x5),x7) -> if{3,#}(x6,x5,x7)
     ap#(isEmpty(),x7) -> isEmpty{1,#}(x7)
     ap#(last(),x7) -> last{1,#}(x7)
     ap#(dropLast(),x7) -> dropLast{1,#}(x7)
    TRS:
     map2(f,xs) -> if3(isEmpty1(xs),f,xs)
     if3(true(),f,xs) -> nil()
     if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
     isEmpty1(nil()) -> true()
     isEmpty1(cons2(x,xs)) -> false()
     last1(cons2(x,nil())) -> x
     last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
     dropLast1(nil()) -> nil()
     dropLast1(cons2(x,nil())) -> nil()
     dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
     ap(map1(x6),x7) -> map2(x6,x7)
     ap(map(),x7) -> map1(x7)
     ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
     ap(if1(x6),x7) -> if2(x6,x7)
     ap(if(),x7) -> if1(x7)
     ap(isEmpty(),x7) -> isEmpty1(x7)
     ap(cons1(x6),x7) -> cons2(x6,x7)
     ap(cons(),x7) -> cons1(x7)
     ap(last(),x7) -> last1(x7)
     ap(dropLast(),x7) -> dropLast1(x7)
    graph:
     ap#(if2(x6,x5),x7) -> if{3,#}(x6,x5,x7) ->
     if{3,#}(false(),f,xs) -> ap#(f,last1(xs))
     ap#(if2(x6,x5),x7) -> if{3,#}(x6,x5,x7) ->
     if{3,#}(false(),f,xs) -> last{1,#}(xs)
     ap#(if2(x6,x5),x7) -> if{3,#}(x6,x5,x7) ->
     if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs))
     ap#(if2(x6,x5),x7) -> if{3,#}(x6,x5,x7) ->
     if{3,#}(false(),f,xs) -> dropLast{1,#}(xs)
     ap#(map1(x6),x7) -> map{2,#}(x6,x7) ->
     map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs)
     ap#(map1(x6),x7) -> map{2,#}(x6,x7) ->
     map{2,#}(f,xs) -> isEmpty{1,#}(xs)
     ap#(dropLast(),x7) -> dropLast{1,#}(x7) ->
     dropLast{1,#}(cons2(x,cons2(y,ys))) -> dropLast{1,#}(cons2(y,ys))
     ap#(last(),x7) -> last{1,#}(x7) ->
     last{1,#}(cons2(x,cons2(y,ys))) -> last{1,#}(cons2(y,ys))
     last{1,#}(cons2(x,cons2(y,ys))) -> last{1,#}(cons2(y,ys)) ->
     last{1,#}(cons2(x,cons2(y,ys))) -> last{1,#}(cons2(y,ys))
     dropLast{1,#}(cons2(x,cons2(y,ys))) -> dropLast{1,#}(cons2(y,ys)) ->
     dropLast{1,#}(cons2(x,cons2(y,ys))) -> dropLast{1,#}(cons2(y,ys))
     if{3,#}(false(),f,xs) -> ap#(f,last1(xs)) ->
     ap#(dropLast(),x7) -> dropLast{1,#}(x7)
     if{3,#}(false(),f,xs) -> ap#(f,last1(xs)) ->
     ap#(last(),x7) -> last{1,#}(x7)
     if{3,#}(false(),f,xs) -> ap#(f,last1(xs)) ->
     ap#(isEmpty(),x7) -> isEmpty{1,#}(x7)
     if{3,#}(false(),f,xs) -> ap#(f,last1(xs)) ->
     ap#(if2(x6,x5),x7) -> if{3,#}(x6,x5,x7)
     if{3,#}(false(),f,xs) -> ap#(f,last1(xs)) ->
     ap#(map1(x6),x7) -> map{2,#}(x6,x7)
     if{3,#}(false(),f,xs) -> last{1,#}(xs) ->
     last{1,#}(cons2(x,cons2(y,ys))) -> last{1,#}(cons2(y,ys))
     if{3,#}(false(),f,xs) -> dropLast{1,#}(xs) ->
     dropLast{1,#}(cons2(x,cons2(y,ys))) -> dropLast{1,#}(cons2(y,ys))
     if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs)) ->
     map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs)
     if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs)) ->
     map{2,#}(f,xs) -> isEmpty{1,#}(xs)
     map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs) ->
     if{3,#}(false(),f,xs) -> ap#(f,last1(xs))
     map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs) ->
     if{3,#}(false(),f,xs) -> last{1,#}(xs)
     map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs) ->
     if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs))
     map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs) -> if{3,#}(false(),f,xs) -> dropLast{1,#}(xs)
    SCC Processor:
     #sccs: 3
     #rules: 7
     #arcs: 23/169
     DPs:
      ap#(if2(x6,x5),x7) -> if{3,#}(x6,x5,x7)
      if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs))
      map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs)
      if{3,#}(false(),f,xs) -> ap#(f,last1(xs))
      ap#(map1(x6),x7) -> map{2,#}(x6,x7)
     TRS:
      map2(f,xs) -> if3(isEmpty1(xs),f,xs)
      if3(true(),f,xs) -> nil()
      if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
      isEmpty1(nil()) -> true()
      isEmpty1(cons2(x,xs)) -> false()
      last1(cons2(x,nil())) -> x
      last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
      dropLast1(nil()) -> nil()
      dropLast1(cons2(x,nil())) -> nil()
      dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
      ap(map1(x6),x7) -> map2(x6,x7)
      ap(map(),x7) -> map1(x7)
      ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
      ap(if1(x6),x7) -> if2(x6,x7)
      ap(if(),x7) -> if1(x7)
      ap(isEmpty(),x7) -> isEmpty1(x7)
      ap(cons1(x6),x7) -> cons2(x6,x7)
      ap(cons(),x7) -> cons1(x7)
      ap(last(),x7) -> last1(x7)
      ap(dropLast(),x7) -> dropLast1(x7)
     Subterm Criterion Processor:
      simple projection:
       pi(map{2,#}) = 0
       pi(if{3,#}) = 1
       pi(ap#) = 0
      problem:
       DPs:
        if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs))
        map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs)
        if{3,#}(false(),f,xs) -> ap#(f,last1(xs))
       TRS:
        map2(f,xs) -> if3(isEmpty1(xs),f,xs)
        if3(true(),f,xs) -> nil()
        if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
        isEmpty1(nil()) -> true()
        isEmpty1(cons2(x,xs)) -> false()
        last1(cons2(x,nil())) -> x
        last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
        dropLast1(nil()) -> nil()
        dropLast1(cons2(x,nil())) -> nil()
        dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
        ap(map1(x6),x7) -> map2(x6,x7)
        ap(map(),x7) -> map1(x7)
        ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
        ap(if1(x6),x7) -> if2(x6,x7)
        ap(if(),x7) -> if1(x7)
        ap(isEmpty(),x7) -> isEmpty1(x7)
        ap(cons1(x6),x7) -> cons2(x6,x7)
        ap(cons(),x7) -> cons1(x7)
        ap(last(),x7) -> last1(x7)
        ap(dropLast(),x7) -> dropLast1(x7)
      SCC Processor:
       #sccs: 1
       #rules: 2
       #arcs: 8/9
       DPs:
        if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs))
        map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs)
       TRS:
        map2(f,xs) -> if3(isEmpty1(xs),f,xs)
        if3(true(),f,xs) -> nil()
        if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
        isEmpty1(nil()) -> true()
        isEmpty1(cons2(x,xs)) -> false()
        last1(cons2(x,nil())) -> x
        last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
        dropLast1(nil()) -> nil()
        dropLast1(cons2(x,nil())) -> nil()
        dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
        ap(map1(x6),x7) -> map2(x6,x7)
        ap(map(),x7) -> map1(x7)
        ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
        ap(if1(x6),x7) -> if2(x6,x7)
        ap(if(),x7) -> if1(x7)
        ap(isEmpty(),x7) -> isEmpty1(x7)
        ap(cons1(x6),x7) -> cons2(x6,x7)
        ap(cons(),x7) -> cons1(x7)
        ap(last(),x7) -> last1(x7)
        ap(dropLast(),x7) -> dropLast1(x7)
       Usable Rule Processor:
        DPs:
         if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs))
         map{2,#}(f,xs) -> if{3,#}(isEmpty1(xs),f,xs)
        TRS:
         dropLast1(nil()) -> nil()
         dropLast1(cons2(x,nil())) -> nil()
         dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
         isEmpty1(nil()) -> true()
         isEmpty1(cons2(x,xs)) -> false()
        Arctic Interpretation Processor:
         dimension: 1
         usable rules:
          dropLast1(nil()) -> nil()
          dropLast1(cons2(x,nil())) -> nil()
          dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
          isEmpty1(nil()) -> true()
          isEmpty1(cons2(x,xs)) -> false()
         interpretation:
          [if{3,#}](x0, x1, x2) = x0 + x2 + -4,
          
          [map{2,#}](x0, x1) = 1x1 + -3,
          
          [dropLast1](x0) = -1x0 + 3,
          
          [cons2](x0, x1) = 2x1 + 4,
          
          [isEmpty1](x0) = x0,
          
          [false] = 4,
          
          [nil] = 3,
          
          [true] = 1
         orientation:
          if{3,#}(false(),f,xs) = xs + 4 >= xs + 4 = map{2,#}(f,dropLast1(xs))
          
          map{2,#}(f,xs) = 1xs + -3 >= xs + -4 = if{3,#}(isEmpty1(xs),f,xs)
          
          dropLast1(nil()) = 3 >= 3 = nil()
          
          dropLast1(cons2(x,nil())) = 4 >= 3 = nil()
          
          dropLast1(cons2(x,cons2(y,ys))) = 3ys + 5 >= 3ys + 5 = cons2(x,dropLast1(cons2(y,ys)))
          
          isEmpty1(nil()) = 3 >= 1 = true()
          
          isEmpty1(cons2(x,xs)) = 2xs + 4 >= 4 = false()
         problem:
          DPs:
           if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs))
          TRS:
           dropLast1(nil()) -> nil()
           dropLast1(cons2(x,nil())) -> nil()
           dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
           isEmpty1(nil()) -> true()
           isEmpty1(cons2(x,xs)) -> false()
         Restore Modifier:
          DPs:
           if{3,#}(false(),f,xs) -> map{2,#}(f,dropLast1(xs))
          TRS:
           map2(f,xs) -> if3(isEmpty1(xs),f,xs)
           if3(true(),f,xs) -> nil()
           if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
           isEmpty1(nil()) -> true()
           isEmpty1(cons2(x,xs)) -> false()
           last1(cons2(x,nil())) -> x
           last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
           dropLast1(nil()) -> nil()
           dropLast1(cons2(x,nil())) -> nil()
           dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
           ap(map1(x6),x7) -> map2(x6,x7)
           ap(map(),x7) -> map1(x7)
           ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
           ap(if1(x6),x7) -> if2(x6,x7)
           ap(if(),x7) -> if1(x7)
           ap(isEmpty(),x7) -> isEmpty1(x7)
           ap(cons1(x6),x7) -> cons2(x6,x7)
           ap(cons(),x7) -> cons1(x7)
           ap(last(),x7) -> last1(x7)
           ap(dropLast(),x7) -> dropLast1(x7)
          SCC Processor:
           #sccs: 0
           #rules: 0
           #arcs: 2/1
           
     
     DPs:
      last{1,#}(cons2(x,cons2(y,ys))) -> last{1,#}(cons2(y,ys))
     TRS:
      map2(f,xs) -> if3(isEmpty1(xs),f,xs)
      if3(true(),f,xs) -> nil()
      if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
      isEmpty1(nil()) -> true()
      isEmpty1(cons2(x,xs)) -> false()
      last1(cons2(x,nil())) -> x
      last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
      dropLast1(nil()) -> nil()
      dropLast1(cons2(x,nil())) -> nil()
      dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
      ap(map1(x6),x7) -> map2(x6,x7)
      ap(map(),x7) -> map1(x7)
      ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
      ap(if1(x6),x7) -> if2(x6,x7)
      ap(if(),x7) -> if1(x7)
      ap(isEmpty(),x7) -> isEmpty1(x7)
      ap(cons1(x6),x7) -> cons2(x6,x7)
      ap(cons(),x7) -> cons1(x7)
      ap(last(),x7) -> last1(x7)
      ap(dropLast(),x7) -> dropLast1(x7)
     Subterm Criterion Processor:
      simple projection:
       pi(last{1,#}) = 0
      problem:
       DPs:
        
       TRS:
        map2(f,xs) -> if3(isEmpty1(xs),f,xs)
        if3(true(),f,xs) -> nil()
        if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
        isEmpty1(nil()) -> true()
        isEmpty1(cons2(x,xs)) -> false()
        last1(cons2(x,nil())) -> x
        last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
        dropLast1(nil()) -> nil()
        dropLast1(cons2(x,nil())) -> nil()
        dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
        ap(map1(x6),x7) -> map2(x6,x7)
        ap(map(),x7) -> map1(x7)
        ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
        ap(if1(x6),x7) -> if2(x6,x7)
        ap(if(),x7) -> if1(x7)
        ap(isEmpty(),x7) -> isEmpty1(x7)
        ap(cons1(x6),x7) -> cons2(x6,x7)
        ap(cons(),x7) -> cons1(x7)
        ap(last(),x7) -> last1(x7)
        ap(dropLast(),x7) -> dropLast1(x7)
      Qed
     
     DPs:
      dropLast{1,#}(cons2(x,cons2(y,ys))) -> dropLast{1,#}(cons2(y,ys))
     TRS:
      map2(f,xs) -> if3(isEmpty1(xs),f,xs)
      if3(true(),f,xs) -> nil()
      if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
      isEmpty1(nil()) -> true()
      isEmpty1(cons2(x,xs)) -> false()
      last1(cons2(x,nil())) -> x
      last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
      dropLast1(nil()) -> nil()
      dropLast1(cons2(x,nil())) -> nil()
      dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
      ap(map1(x6),x7) -> map2(x6,x7)
      ap(map(),x7) -> map1(x7)
      ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
      ap(if1(x6),x7) -> if2(x6,x7)
      ap(if(),x7) -> if1(x7)
      ap(isEmpty(),x7) -> isEmpty1(x7)
      ap(cons1(x6),x7) -> cons2(x6,x7)
      ap(cons(),x7) -> cons1(x7)
      ap(last(),x7) -> last1(x7)
      ap(dropLast(),x7) -> dropLast1(x7)
     Subterm Criterion Processor:
      simple projection:
       pi(dropLast{1,#}) = 0
      problem:
       DPs:
        
       TRS:
        map2(f,xs) -> if3(isEmpty1(xs),f,xs)
        if3(true(),f,xs) -> nil()
        if3(false(),f,xs) -> cons2(ap(f,last1(xs)),map2(f,dropLast1(xs)))
        isEmpty1(nil()) -> true()
        isEmpty1(cons2(x,xs)) -> false()
        last1(cons2(x,nil())) -> x
        last1(cons2(x,cons2(y,ys))) -> last1(cons2(y,ys))
        dropLast1(nil()) -> nil()
        dropLast1(cons2(x,nil())) -> nil()
        dropLast1(cons2(x,cons2(y,ys))) -> cons2(x,dropLast1(cons2(y,ys)))
        ap(map1(x6),x7) -> map2(x6,x7)
        ap(map(),x7) -> map1(x7)
        ap(if2(x6,x5),x7) -> if3(x6,x5,x7)
        ap(if1(x6),x7) -> if2(x6,x7)
        ap(if(),x7) -> if1(x7)
        ap(isEmpty(),x7) -> isEmpty1(x7)
        ap(cons1(x6),x7) -> cons2(x6,x7)
        ap(cons(),x7) -> cons1(x7)
        ap(last(),x7) -> last1(x7)
        ap(dropLast(),x7) -> dropLast1(x7)
      Qed