YES
Time: 0.040467
TRS:
 {     active f x -> mark x,
       active f x -> f active x,
         f mark x -> mark f x,
           f ok x -> ok f x,
        f found x -> found f x,
       top mark x -> top check x,
   top active c() -> top mark c(),
      top found x -> top active x,
          check x -> start match(f X(), x),
        check f x -> f check x,
       start ok x -> found x,
  match(f x, f y) -> f match(x, y),
    match(X(), x) -> proper x,
       proper f x -> f proper x,
       proper c() -> ok c()}
 DP:
  DP:
   {     active# f x -> active# x,
         active# f x -> f# active x,
           f# mark x -> f# x,
             f# ok x -> f# x,
          f# found x -> f# x,
         top# mark x -> top# check x,
         top# mark x -> check# x,
     top# active c() -> top# mark c(),
        top# found x -> active# x,
        top# found x -> top# active x,
            check# x -> f# X(),
            check# x -> start# match(f X(), x),
            check# x -> match#(f X(), x),
          check# f x -> f# check x,
          check# f x -> check# x,
    match#(f x, f y) -> f# match(x, y),
    match#(f x, f y) -> match#(x, y),
      match#(X(), x) -> proper# x,
         proper# f x -> f# proper x,
         proper# f x -> proper# x}
  TRS:
  {     active f x -> mark x,
        active f x -> f active x,
          f mark x -> mark f x,
            f ok x -> ok f x,
         f found x -> found f x,
        top mark x -> top check x,
    top active c() -> top mark c(),
       top found x -> top active x,
           check x -> start match(f X(), x),
         check f x -> f check x,
        start ok x -> found x,
   match(f x, f y) -> f match(x, y),
     match(X(), x) -> proper x,
        proper f x -> f proper x,
        proper c() -> ok c()}
  EDG:
   {(top# mark x -> top# check x, top# found x -> top# active x)
    (top# mark x -> top# check x, top# found x -> active# x)
    (top# mark x -> top# check x, top# mark x -> check# x)
    (top# mark x -> top# check x, top# mark x -> top# check x)
    (check# f x -> f# check x, f# found x -> f# x)
    (check# f x -> f# check x, f# ok x -> f# x)
    (check# f x -> f# check x, f# mark x -> f# x)
    (check# x -> match#(f X(), x), match#(f x, f y) -> match#(x, y))
    (check# x -> match#(f X(), x), match#(f x, f y) -> f# match(x, y))
    (match#(f x, f y) -> f# match(x, y), f# found x -> f# x)
    (match#(f x, f y) -> f# match(x, y), f# ok x -> f# x)
    (match#(f x, f y) -> f# match(x, y), f# mark x -> f# x)
    (active# f x -> active# x, active# f x -> f# active x)
    (active# f x -> active# x, active# f x -> active# x)
    (f# ok x -> f# x, f# found x -> f# x)
    (f# ok x -> f# x, f# ok x -> f# x)
    (f# ok x -> f# x, f# mark x -> f# x)
    (top# mark x -> check# x, check# f x -> check# x)
    (top# mark x -> check# x, check# f x -> f# check x)
    (top# mark x -> check# x, check# x -> match#(f X(), x))
    (top# mark x -> check# x, check# x -> start# match(f X(), x))
    (top# mark x -> check# x, check# x -> f# X())
    (check# f x -> check# x, check# f x -> check# x)
    (check# f x -> check# x, check# f x -> f# check x)
    (check# f x -> check# x, check# x -> match#(f X(), x))
    (check# f x -> check# x, check# x -> start# match(f X(), x))
    (check# f x -> check# x, check# x -> f# X())
    (proper# f x -> proper# x, proper# f x -> proper# x)
    (proper# f x -> proper# x, proper# f x -> f# proper x)
    (match#(f x, f y) -> match#(x, y), match#(X(), x) -> proper# x)
    (match#(f x, f y) -> match#(x, y), match#(f x, f y) -> match#(x, y))
    (match#(f x, f y) -> match#(x, y), match#(f x, f y) -> f# match(x, y))
    (match#(X(), x) -> proper# x, proper# f x -> f# proper x)
    (match#(X(), x) -> proper# x, proper# f x -> proper# x)
    (top# found x -> active# x, active# f x -> active# x)
    (top# found x -> active# x, active# f x -> f# active x)
    (f# found x -> f# x, f# mark x -> f# x)
    (f# found x -> f# x, f# ok x -> f# x)
    (f# found x -> f# x, f# found x -> f# x)
    (f# mark x -> f# x, f# mark x -> f# x)
    (f# mark x -> f# x, f# ok x -> f# x)
    (f# mark x -> f# x, f# found x -> f# x)
    (top# active c() -> top# mark c(), top# mark x -> top# check x)
    (top# active c() -> top# mark c(), top# mark x -> check# x)
    (proper# f x -> f# proper x, f# mark x -> f# x)
    (proper# f x -> f# proper x, f# ok x -> f# x)
    (proper# f x -> f# proper x, f# found x -> f# x)
    (top# found x -> top# active x, top# mark x -> top# check x)
    (top# found x -> top# active x, top# mark x -> check# x)
    (top# found x -> top# active x, top# active c() -> top# mark c())
    (top# found x -> top# active x, top# found x -> active# x)
    (top# found x -> top# active x, top# found x -> top# active x)
    (active# f x -> f# active x, f# mark x -> f# x)
    (active# f x -> f# active x, f# ok x -> f# x)
    (active# f x -> f# active x, f# found x -> f# x)}
   SCCS (6):
    Scc:
     {proper# f x -> proper# x}
    Scc:
     {match#(f x, f y) -> match#(x, y)}
    Scc:
     {check# f x -> check# x}
    Scc:
     {    top# mark x -> top# check x,
      top# active c() -> top# mark c(),
         top# found x -> top# active x}
    Scc:
     { f# mark x -> f# x,
         f# ok x -> f# x,
      f# found x -> f# x}
    Scc:
     {active# f x -> active# x}
    SCC (1):
     Strict:
      {proper# f x -> proper# x}
     Weak:
     {     active f x -> mark x,
           active f x -> f active x,
             f mark x -> mark f x,
               f ok x -> ok f x,
            f found x -> found f x,
           top mark x -> top check x,
       top active c() -> top mark c(),
          top found x -> top active x,
              check x -> start match(f X(), x),
            check f x -> f check x,
           start ok x -> found x,
      match(f x, f y) -> f match(x, y),
        match(X(), x) -> proper x,
           proper f x -> f proper x,
           proper c() -> ok c()}
     SPSC:
      Simple Projection:
       pi(proper#) = 0
      Strict:
       {}
      Qed
    SCC (1):
     Strict:
      {match#(f x, f y) -> match#(x, y)}
     Weak:
     {     active f x -> mark x,
           active f x -> f active x,
             f mark x -> mark f x,
               f ok x -> ok f x,
            f found x -> found f x,
           top mark x -> top check x,
       top active c() -> top mark c(),
          top found x -> top active x,
              check x -> start match(f X(), x),
            check f x -> f check x,
           start ok x -> found x,
      match(f x, f y) -> f match(x, y),
        match(X(), x) -> proper x,
           proper f x -> f proper x,
           proper c() -> ok c()}
     SPSC:
      Simple Projection:
       pi(match#) = 1
      Strict:
       {}
      Qed
    SCC (1):
     Strict:
      {check# f x -> check# x}
     Weak:
     {     active f x -> mark x,
           active f x -> f active x,
             f mark x -> mark f x,
               f ok x -> ok f x,
            f found x -> found f x,
           top mark x -> top check x,
       top active c() -> top mark c(),
          top found x -> top active x,
              check x -> start match(f X(), x),
            check f x -> f check x,
           start ok x -> found x,
      match(f x, f y) -> f match(x, y),
        match(X(), x) -> proper x,
           proper f x -> f proper x,
           proper c() -> ok c()}
     SPSC:
      Simple Projection:
       pi(check#) = 0
      Strict:
       {}
      Qed
    SCC (3):
     Strict:
      {    top# mark x -> top# check x,
       top# active c() -> top# mark c(),
          top# found x -> top# active x}
     Weak:
     {     active f x -> mark x,
           active f x -> f active x,
             f mark x -> mark f x,
               f ok x -> ok f x,
            f found x -> found f x,
           top mark x -> top check x,
       top active c() -> top mark c(),
          top found x -> top active x,
              check x -> start match(f X(), x),
            check f x -> f check x,
           start ok x -> found x,
      match(f x, f y) -> f match(x, y),
        match(X(), x) -> proper x,
           proper f x -> f proper x,
           proper c() -> ok c()}
     POLY:
      Mode: weak, max_in=1, output_bits=-1, dnum=1, ur=true
      Interpretation:
       [match](x0, x1) = x0,
       
       [mark](x0) = 0,
       
       [active](x0) = x0,
       
       [f](x0) = 0,
       
       [top](x0) = x0 + 1,
       
       [check](x0) = 0,
       
       [start](x0) = x0,
       
       [proper](x0) = 1,
       
       [ok](x0) = x0,
       
       [found](x0) = x0,
       
       [c] = 1,
       
       [X] = 1,
       
       [top#](x0) = x0
      Strict:
       top# found x -> top# active x
       0 + 1x >= 0 + 1x
       top# active c() -> top# mark c()
       1 >= 0
       top# mark x -> top# check x
       0 + 0x >= 0 + 0x
      Weak:
       
     EDG:
      {(top# found x -> top# active x, top# found x -> top# active x)
       (top# found x -> top# active x, top# mark x -> top# check x)
       (top# mark x -> top# check x, top# mark x -> top# check x)
       (top# mark x -> top# check x, top# found x -> top# active x)}
      SCCS (1):
       Scc:
        { top# mark x -> top# check x,
         top# found x -> top# active x}
       SCC (2):
        Strict:
         { top# mark x -> top# check x,
          top# found x -> top# active x}
        Weak:
        {     active f x -> mark x,
              active f x -> f active x,
                f mark x -> mark f x,
                  f ok x -> ok f x,
               f found x -> found f x,
              top mark x -> top check x,
          top active c() -> top mark c(),
             top found x -> top active x,
                 check x -> start match(f X(), x),
               check f x -> f check x,
              start ok x -> found x,
         match(f x, f y) -> f match(x, y),
           match(X(), x) -> proper x,
              proper f x -> f proper x,
              proper c() -> ok c()}
        POLY:
         Mode: weak, max_in=1, output_bits=-1, dnum=1, ur=true
         Interpretation:
          [match](x0, x1) = x0,
          
          [mark](x0) = x0 + 1,
          
          [active](x0) = x0,
          
          [f](x0) = x0 + 1,
          
          [top](x0) = x0 + 1,
          
          [check](x0) = x0 + 1,
          
          [start](x0) = x0 + 1,
          
          [proper](x0) = x0,
          
          [ok](x0) = x0,
          
          [found](x0) = x0 + 1,
          
          [c] = 1,
          
          [X] = 0,
          
          [top#](x0) = x0
         Strict:
          top# found x -> top# active x
          1 + 1x >= 0 + 1x
          top# mark x -> top# check x
          1 + 1x >= 1 + 1x
         Weak:
          
        EDG:
         {(top# mark x -> top# check x, top# mark x -> top# check x)}
         SCCS (1):
          Scc:
           {top# mark x -> top# check x}
          SCC (1):
           Strict:
            {top# mark x -> top# check x}
           Weak:
           {     active f x -> mark x,
                 active f x -> f active x,
                   f mark x -> mark f x,
                     f ok x -> ok f x,
                  f found x -> found f x,
                 top mark x -> top check x,
             top active c() -> top mark c(),
                top found x -> top active x,
                    check x -> start match(f X(), x),
                  check f x -> f check x,
                 start ok x -> found x,
            match(f x, f y) -> f match(x, y),
              match(X(), x) -> proper x,
                 proper f x -> f proper x,
                 proper c() -> ok c()}
           POLY:
            Mode: weak, max_in=1, output_bits=-1, dnum=1, ur=true
            Interpretation:
             [match](x0, x1) = 0,
             
             [mark](x0) = 1,
             
             [active](x0) = 0,
             
             [f](x0) = x0,
             
             [top](x0) = x0 + 1,
             
             [check](x0) = 0,
             
             [start](x0) = 0,
             
             [proper](x0) = 0,
             
             [ok](x0) = 0,
             
             [found](x0) = 0,
             
             [c] = 0,
             
             [X] = 0,
             
             [top#](x0) = x0 + 1
            Strict:
             top# mark x -> top# check x
             2 + 0x >= 1 + 0x
            Weak:
             
           Qed
  SCC (3):
   Strict:
    { f# mark x -> f# x,
        f# ok x -> f# x,
     f# found x -> f# x}
   Weak:
   {     active f x -> mark x,
         active f x -> f active x,
           f mark x -> mark f x,
             f ok x -> ok f x,
          f found x -> found f x,
         top mark x -> top check x,
     top active c() -> top mark c(),
        top found x -> top active x,
            check x -> start match(f X(), x),
          check f x -> f check x,
         start ok x -> found x,
    match(f x, f y) -> f match(x, y),
      match(X(), x) -> proper x,
         proper f x -> f proper x,
         proper c() -> ok c()}
   SPSC:
    Simple Projection:
     pi(f#) = 0
    Strict:
     { f# mark x -> f# x,
      f# found x -> f# x}
    EDG:
     {(f# found x -> f# x, f# found x -> f# x)
      (f# found x -> f# x, f# mark x -> f# x)
      (f# mark x -> f# x, f# mark x -> f# x)
      (f# mark x -> f# x, f# found x -> f# x)}
     SCCS (1):
      Scc:
       { f# mark x -> f# x,
        f# found x -> f# x}
      SCC (2):
       Strict:
        { f# mark x -> f# x,
         f# found x -> f# x}
       Weak:
       {     active f x -> mark x,
             active f x -> f active x,
               f mark x -> mark f x,
                 f ok x -> ok f x,
              f found x -> found f x,
             top mark x -> top check x,
         top active c() -> top mark c(),
            top found x -> top active x,
                check x -> start match(f X(), x),
              check f x -> f check x,
             start ok x -> found x,
        match(f x, f y) -> f match(x, y),
          match(X(), x) -> proper x,
             proper f x -> f proper x,
             proper c() -> ok c()}
       SPSC:
        Simple Projection:
         pi(f#) = 0
        Strict:
         {f# found x -> f# x}
        EDG:
         {(f# found x -> f# x, f# found x -> f# x)}
         SCCS (1):
          Scc:
           {f# found x -> f# x}
          SCC (1):
           Strict:
            {f# found x -> f# x}
           Weak:
           {     active f x -> mark x,
                 active f x -> f active x,
                   f mark x -> mark f x,
                     f ok x -> ok f x,
                  f found x -> found f x,
                 top mark x -> top check x,
             top active c() -> top mark c(),
                top found x -> top active x,
                    check x -> start match(f X(), x),
                  check f x -> f check x,
                 start ok x -> found x,
            match(f x, f y) -> f match(x, y),
              match(X(), x) -> proper x,
                 proper f x -> f proper x,
                 proper c() -> ok c()}
           SPSC:
            Simple Projection:
             pi(f#) = 0
            Strict:
             {}
            Qed
  SCC (1):
   Strict:
    {active# f x -> active# x}
   Weak:
   {     active f x -> mark x,
         active f x -> f active x,
           f mark x -> mark f x,
             f ok x -> ok f x,
          f found x -> found f x,
         top mark x -> top check x,
     top active c() -> top mark c(),
        top found x -> top active x,
            check x -> start match(f X(), x),
          check f x -> f check x,
         start ok x -> found x,
    match(f x, f y) -> f match(x, y),
      match(X(), x) -> proper x,
         proper f x -> f proper x,
         proper c() -> ok c()}
   SPSC:
    Simple Projection:
     pi(active#) = 0
    Strict:
     {}
    Qed