R
↳Dependency Pair Analysis
+'(x, s(y)) -> +'(x, y)
*'(x, s(y)) -> +'(*(x, y), x)
*'(x, s(y)) -> *'(x, y)
GE(s(x), s(y)) -> GE(x, y)
-'(s(x), s(y)) -> -'(x, y)
FACT(x) -> IFFACT(x, ge(x, s(s(0))))
FACT(x) -> GE(x, s(s(0)))
IFFACT(x, true) -> *'(x, fact(-(x, s(0))))
IFFACT(x, true) -> FACT(-(x, s(0)))
IFFACT(x, true) -> -'(x, s(0))
R
↳DPs
→DP Problem 1
↳Forward Instantiation Transformation
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
+'(x, s(y)) -> +'(x, y)
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
+'(x, s(y)) -> +'(x, y)
+'(x'', s(s(y''))) -> +'(x'', s(y''))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 6
↳Forward Instantiation Transformation
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
+'(x'', s(s(y''))) -> +'(x'', s(y''))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
+'(x'', s(s(y''))) -> +'(x'', s(y''))
+'(x'''', s(s(s(y'''')))) -> +'(x'''', s(s(y'''')))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 6
↳FwdInst
...
→DP Problem 7
↳Argument Filtering and Ordering
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
+'(x'''', s(s(s(y'''')))) -> +'(x'''', s(s(y'''')))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
+'(x'''', s(s(s(y'''')))) -> +'(x'''', s(s(y'''')))
POL(s(x1)) = 1 + x1 POL(+'(x1, x2)) = 1 + x1 + x2
+'(x1, x2) -> +'(x1, x2)
s(x1) -> s(x1)
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 6
↳FwdInst
...
→DP Problem 8
↳Dependency Graph
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳Forward Instantiation Transformation
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
GE(s(x), s(y)) -> GE(x, y)
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
GE(s(x), s(y)) -> GE(x, y)
GE(s(s(x'')), s(s(y''))) -> GE(s(x''), s(y''))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 9
↳Forward Instantiation Transformation
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
GE(s(s(x'')), s(s(y''))) -> GE(s(x''), s(y''))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
GE(s(s(x'')), s(s(y''))) -> GE(s(x''), s(y''))
GE(s(s(s(x''''))), s(s(s(y'''')))) -> GE(s(s(x'''')), s(s(y'''')))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 9
↳FwdInst
...
→DP Problem 10
↳Argument Filtering and Ordering
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
GE(s(s(s(x''''))), s(s(s(y'''')))) -> GE(s(s(x'''')), s(s(y'''')))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
GE(s(s(s(x''''))), s(s(s(y'''')))) -> GE(s(s(x'''')), s(s(y'''')))
POL(GE(x1, x2)) = 1 + x1 + x2 POL(s(x1)) = 1 + x1
GE(x1, x2) -> GE(x1, x2)
s(x1) -> s(x1)
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 9
↳FwdInst
...
→DP Problem 11
↳Dependency Graph
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳Forward Instantiation Transformation
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
-'(s(x), s(y)) -> -'(x, y)
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
-'(s(x), s(y)) -> -'(x, y)
-'(s(s(x'')), s(s(y''))) -> -'(s(x''), s(y''))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 12
↳Forward Instantiation Transformation
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
-'(s(s(x'')), s(s(y''))) -> -'(s(x''), s(y''))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
-'(s(s(x'')), s(s(y''))) -> -'(s(x''), s(y''))
-'(s(s(s(x''''))), s(s(s(y'''')))) -> -'(s(s(x'''')), s(s(y'''')))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 12
↳FwdInst
...
→DP Problem 13
↳Argument Filtering and Ordering
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
-'(s(s(s(x''''))), s(s(s(y'''')))) -> -'(s(s(x'''')), s(s(y'''')))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
-'(s(s(s(x''''))), s(s(s(y'''')))) -> -'(s(s(x'''')), s(s(y'''')))
POL(-'(x1, x2)) = 1 + x1 + x2 POL(s(x1)) = 1 + x1
-'(x1, x2) -> -'(x1, x2)
s(x1) -> s(x1)
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 12
↳FwdInst
...
→DP Problem 14
↳Dependency Graph
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳Forward Instantiation Transformation
→DP Problem 5
↳Nar
*'(x, s(y)) -> *'(x, y)
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
*'(x, s(y)) -> *'(x, y)
*'(x'', s(s(y''))) -> *'(x'', s(y''))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 15
↳Forward Instantiation Transformation
→DP Problem 5
↳Nar
*'(x'', s(s(y''))) -> *'(x'', s(y''))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
*'(x'', s(s(y''))) -> *'(x'', s(y''))
*'(x'''', s(s(s(y'''')))) -> *'(x'''', s(s(y'''')))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 15
↳FwdInst
...
→DP Problem 16
↳Argument Filtering and Ordering
→DP Problem 5
↳Nar
*'(x'''', s(s(s(y'''')))) -> *'(x'''', s(s(y'''')))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
*'(x'''', s(s(s(y'''')))) -> *'(x'''', s(s(y'''')))
POL(*'(x1, x2)) = 1 + x1 + x2 POL(s(x1)) = 1 + x1
*'(x1, x2) -> *'(x1, x2)
s(x1) -> s(x1)
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 15
↳FwdInst
...
→DP Problem 17
↳Dependency Graph
→DP Problem 5
↳Nar
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Narrowing Transformation
IFFACT(x, true) -> FACT(-(x, s(0)))
FACT(x) -> IFFACT(x, ge(x, s(s(0))))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
two new Dependency Pairs are created:
FACT(x) -> IFFACT(x, ge(x, s(s(0))))
FACT(0) -> IFFACT(0, false)
FACT(s(x'')) -> IFFACT(s(x''), ge(x'', s(0)))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
→DP Problem 18
↳Narrowing Transformation
FACT(s(x'')) -> IFFACT(s(x''), ge(x'', s(0)))
IFFACT(x, true) -> FACT(-(x, s(0)))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
IFFACT(x, true) -> FACT(-(x, s(0)))
IFFACT(s(x''), true) -> FACT(-(x'', 0))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
→DP Problem 18
↳Nar
...
→DP Problem 19
↳Rewriting Transformation
IFFACT(s(x''), true) -> FACT(-(x'', 0))
FACT(s(x'')) -> IFFACT(s(x''), ge(x'', s(0)))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
IFFACT(s(x''), true) -> FACT(-(x'', 0))
IFFACT(s(x''), true) -> FACT(x'')
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
→DP Problem 18
↳Nar
...
→DP Problem 20
↳Narrowing Transformation
IFFACT(s(x''), true) -> FACT(x'')
FACT(s(x'')) -> IFFACT(s(x''), ge(x'', s(0)))
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
two new Dependency Pairs are created:
FACT(s(x'')) -> IFFACT(s(x''), ge(x'', s(0)))
FACT(s(0)) -> IFFACT(s(0), false)
FACT(s(s(x'))) -> IFFACT(s(s(x')), ge(x', 0))
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
→DP Problem 18
↳Nar
...
→DP Problem 21
↳Rewriting Transformation
FACT(s(s(x'))) -> IFFACT(s(s(x')), ge(x', 0))
IFFACT(s(x''), true) -> FACT(x'')
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
one new Dependency Pair is created:
FACT(s(s(x'))) -> IFFACT(s(s(x')), ge(x', 0))
FACT(s(s(x'))) -> IFFACT(s(s(x')), true)
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
→DP Problem 18
↳Nar
...
→DP Problem 22
↳Argument Filtering and Ordering
FACT(s(s(x'))) -> IFFACT(s(s(x')), true)
IFFACT(s(x''), true) -> FACT(x'')
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost
FACT(s(s(x'))) -> IFFACT(s(s(x')), true)
POL(FACT(x1)) = 1 + x1 POL(IFFACT(x1, x2)) = x1 + x2 POL(true) = 0 POL(s(x1)) = 1 + x1
FACT(x1) -> FACT(x1)
IFFACT(x1, x2) -> IFFACT(x1, x2)
s(x1) -> s(x1)
R
↳DPs
→DP Problem 1
↳FwdInst
→DP Problem 2
↳FwdInst
→DP Problem 3
↳FwdInst
→DP Problem 4
↳FwdInst
→DP Problem 5
↳Nar
→DP Problem 18
↳Nar
...
→DP Problem 23
↳Dependency Graph
IFFACT(s(x''), true) -> FACT(x'')
+(x, 0) -> x
+(x, s(y)) -> s(+(x, y))
*(x, 0) -> 0
*(x, s(y)) -> +(*(x, y), x)
ge(x, 0) -> true
ge(0, s(y)) -> false
ge(s(x), s(y)) -> ge(x, y)
-(x, 0) -> x
-(s(x), s(y)) -> -(x, y)
fact(x) -> iffact(x, ge(x, s(s(0))))
iffact(x, true) -> *(x, fact(-(x, s(0))))
iffact(x, false) -> s(0)
innermost