0 QTRS
↳1 Overlay + Local Confluence (⇔)
↳2 QTRS
↳3 DependencyPairsProof (⇔)
↳4 QDP
↳5 DependencyGraphProof (⇔)
↳6 AND
↳7 QDP
↳8 UsableRulesProof (⇔)
↳9 QDP
↳10 QReductionProof (⇔)
↳11 QDP
↳12 QDPSizeChangeProof (⇔)
↳13 YES
↳14 QDP
↳15 UsableRulesProof (⇔)
↳16 QDP
↳17 QReductionProof (⇔)
↳18 QDP
↳19 QDPSizeChangeProof (⇔)
↳20 YES
↳21 QDP
↳22 UsableRulesProof (⇔)
↳23 QDP
↳24 QReductionProof (⇔)
↳25 QDP
↳26 QDPSizeChangeProof (⇔)
↳27 YES
↳28 QDP
↳29 UsableRulesProof (⇔)
↳30 QDP
↳31 QReductionProof (⇔)
↳32 QDP
↳33 Induction-Processor (⇐)
↳34 AND
↳35 QDP
↳36 PisEmptyProof (⇔)
↳37 YES
↳38 QTRS
↳39 QTRSRRRProof (⇔)
↳40 QTRS
↳41 RisEmptyProof (⇔)
↳42 YES
last(nil) → 0
last(cons(x, nil)) → x
last(cons(x, cons(y, xs))) → last(cons(y, xs))
del(x, nil) → nil
del(x, cons(y, xs)) → if(eq(x, y), x, y, xs)
if(true, x, y, xs) → xs
if(false, x, y, xs) → cons(y, del(x, xs))
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
reverse(nil) → nil
reverse(cons(x, xs)) → cons(last(cons(x, xs)), reverse(del(last(cons(x, xs)), cons(x, xs))))
last(nil) → 0
last(cons(x, nil)) → x
last(cons(x, cons(y, xs))) → last(cons(y, xs))
del(x, nil) → nil
del(x, cons(y, xs)) → if(eq(x, y), x, y, xs)
if(true, x, y, xs) → xs
if(false, x, y, xs) → cons(y, del(x, xs))
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
reverse(nil) → nil
reverse(cons(x, xs)) → cons(last(cons(x, xs)), reverse(del(last(cons(x, xs)), cons(x, xs))))
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
LAST(cons(x, cons(y, xs))) → LAST(cons(y, xs))
DEL(x, cons(y, xs)) → IF(eq(x, y), x, y, xs)
DEL(x, cons(y, xs)) → EQ(x, y)
IF(false, x, y, xs) → DEL(x, xs)
EQ(s(x), s(y)) → EQ(x, y)
REVERSE(cons(x, xs)) → LAST(cons(x, xs))
REVERSE(cons(x, xs)) → REVERSE(del(last(cons(x, xs)), cons(x, xs)))
REVERSE(cons(x, xs)) → DEL(last(cons(x, xs)), cons(x, xs))
last(nil) → 0
last(cons(x, nil)) → x
last(cons(x, cons(y, xs))) → last(cons(y, xs))
del(x, nil) → nil
del(x, cons(y, xs)) → if(eq(x, y), x, y, xs)
if(true, x, y, xs) → xs
if(false, x, y, xs) → cons(y, del(x, xs))
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
reverse(nil) → nil
reverse(cons(x, xs)) → cons(last(cons(x, xs)), reverse(del(last(cons(x, xs)), cons(x, xs))))
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
EQ(s(x), s(y)) → EQ(x, y)
last(nil) → 0
last(cons(x, nil)) → x
last(cons(x, cons(y, xs))) → last(cons(y, xs))
del(x, nil) → nil
del(x, cons(y, xs)) → if(eq(x, y), x, y, xs)
if(true, x, y, xs) → xs
if(false, x, y, xs) → cons(y, del(x, xs))
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
reverse(nil) → nil
reverse(cons(x, xs)) → cons(last(cons(x, xs)), reverse(del(last(cons(x, xs)), cons(x, xs))))
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
EQ(s(x), s(y)) → EQ(x, y)
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
EQ(s(x), s(y)) → EQ(x, y)
From the DPs we obtained the following set of size-change graphs:
IF(false, x, y, xs) → DEL(x, xs)
DEL(x, cons(y, xs)) → IF(eq(x, y), x, y, xs)
last(nil) → 0
last(cons(x, nil)) → x
last(cons(x, cons(y, xs))) → last(cons(y, xs))
del(x, nil) → nil
del(x, cons(y, xs)) → if(eq(x, y), x, y, xs)
if(true, x, y, xs) → xs
if(false, x, y, xs) → cons(y, del(x, xs))
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
reverse(nil) → nil
reverse(cons(x, xs)) → cons(last(cons(x, xs)), reverse(del(last(cons(x, xs)), cons(x, xs))))
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
IF(false, x, y, xs) → DEL(x, xs)
DEL(x, cons(y, xs)) → IF(eq(x, y), x, y, xs)
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
reverse(nil)
reverse(cons(x0, x1))
IF(false, x, y, xs) → DEL(x, xs)
DEL(x, cons(y, xs)) → IF(eq(x, y), x, y, xs)
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
From the DPs we obtained the following set of size-change graphs:
LAST(cons(x, cons(y, xs))) → LAST(cons(y, xs))
last(nil) → 0
last(cons(x, nil)) → x
last(cons(x, cons(y, xs))) → last(cons(y, xs))
del(x, nil) → nil
del(x, cons(y, xs)) → if(eq(x, y), x, y, xs)
if(true, x, y, xs) → xs
if(false, x, y, xs) → cons(y, del(x, xs))
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
reverse(nil) → nil
reverse(cons(x, xs)) → cons(last(cons(x, xs)), reverse(del(last(cons(x, xs)), cons(x, xs))))
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
LAST(cons(x, cons(y, xs))) → LAST(cons(y, xs))
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
LAST(cons(x, cons(y, xs))) → LAST(cons(y, xs))
From the DPs we obtained the following set of size-change graphs:
REVERSE(cons(x, xs)) → REVERSE(del(last(cons(x, xs)), cons(x, xs)))
last(nil) → 0
last(cons(x, nil)) → x
last(cons(x, cons(y, xs))) → last(cons(y, xs))
del(x, nil) → nil
del(x, cons(y, xs)) → if(eq(x, y), x, y, xs)
if(true, x, y, xs) → xs
if(false, x, y, xs) → cons(y, del(x, xs))
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
reverse(nil) → nil
reverse(cons(x, xs)) → cons(last(cons(x, xs)), reverse(del(last(cons(x, xs)), cons(x, xs))))
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
REVERSE(cons(x, xs)) → REVERSE(del(last(cons(x, xs)), cons(x, xs)))
last(cons(x, nil)) → x
last(cons(x, cons(y, xs))) → last(cons(y, xs))
del(x, cons(y, xs)) → if(eq(x, y), x, y, xs)
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
if(true, x, y, xs) → xs
if(false, x, y, xs) → cons(y, del(x, xs))
del(x, nil) → nil
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
reverse(nil)
reverse(cons(x0, x1))
reverse(nil)
reverse(cons(x0, x1))
REVERSE(cons(x, xs)) → REVERSE(del(last(cons(x, xs)), cons(x, xs)))
last(cons(x, nil)) → x
last(cons(x, cons(y, xs))) → last(cons(y, xs))
del(x, cons(y, xs)) → if(eq(x, y), x, y, xs)
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
if(true, x, y, xs) → xs
if(false, x, y, xs) → cons(y, del(x, xs))
del(x, nil) → nil
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
POL(0) = 3
POL(REVERSE(x1)) = x1
POL(cons(x1, x2)) = 1 + 2·x1 + 2·x2
POL(del(x1, x2)) = x2
POL(eq(x1, x2)) = 2·x1
POL(false) = 0
POL(if(x1, x2, x3, x4)) = 1 + 2·x3 + 2·x4
POL(last(x1)) = 2 + 2·x1
POL(nil) = 3
POL(s(x1)) = x1
POL(true) = 3
[x, x0, x1, x2, x3, x59, y44, xs28, x68, y51, y11, xs7, x77, x16, x7, y4, xs2, y24, x41, x50, y37] equal_bool(true, false) -> false equal_bool(false, true) -> false equal_bool(true, true) -> true equal_bool(false, false) -> true true and x -> x false and x -> false true or x -> true false or x -> x not(false) -> true not(true) -> false isa_true(true) -> true isa_true(false) -> false isa_false(true) -> false isa_false(false) -> true equal_sort[a0](0, 0) -> true equal_sort[a0](0, s(x0)) -> false equal_sort[a0](s(x0), 0) -> false equal_sort[a0](s(x0), s(x1)) -> equal_sort[a0](x0, x1) equal_sort[a24](cons(x0, x1), cons(x2, x3)) -> equal_sort[a24](x0, x2) and equal_sort[a24](x1, x3) equal_sort[a24](cons(x0, x1), nil) -> false equal_sort[a24](nil, cons(x0, x1)) -> false equal_sort[a24](nil, nil) -> true equal_sort[a42](witness_sort[a42], witness_sort[a42]) -> true if'(true, x59, y44, xs28) -> true if'(false, x68, y51, cons(y11, xs7)) -> if'(eq(x68, y11), x68, y11, xs7) if'(false, x68, y51, nil) -> false del'(x77, nil) -> false equal_bool(eq(x16, y11), true) -> true | del'(x16, cons(y11, xs7)) -> true equal_bool(eq(x16, y11), true) -> false | del'(x16, cons(y11, xs7)) -> del'(x16, xs7) last(cons(x, nil)) -> x last(cons(x7, cons(y4, xs2))) -> last(cons(y4, xs2)) last(nil) -> 0 eq(0, 0) -> true eq(0, s(y24)) -> false eq(s(x41), 0) -> false eq(s(x50), s(y37)) -> eq(x50, y37) if(true, x59, y44, xs28) -> xs28 if(false, x68, y51, cons(y11, xs7)) -> cons(y51, if(eq(x68, y11), x68, y11, xs7)) if(false, x68, y51, nil) -> cons(y51, nil) del(x77, nil) -> nil equal_bool(eq(x16, y11), true) -> true | del(x16, cons(y11, xs7)) -> xs7 equal_bool(eq(x16, y11), true) -> false | del(x16, cons(y11, xs7)) -> cons(y11, del(x16, xs7))
proof of internal # AProVE Commit ID: 9a00b172b26c9abb2d4c4d5eaf341e919eb0fbf1 nowonder 20100222 unpublished dirty Partial correctness of the following Program [x, x0, x1, x2, x3, x59, y44, xs28, x68, y51, y11, xs7, x77, x16, x7, y4, xs2, y24, x41, x50, y37] equal_bool(true, false) -> false equal_bool(false, true) -> false equal_bool(true, true) -> true equal_bool(false, false) -> true true and x -> x false and x -> false true or x -> true false or x -> x not(false) -> true not(true) -> false isa_true(true) -> true isa_true(false) -> false isa_false(true) -> false isa_false(false) -> true equal_sort[a0](0, 0) -> true equal_sort[a0](0, s(x0)) -> false equal_sort[a0](s(x0), 0) -> false equal_sort[a0](s(x0), s(x1)) -> equal_sort[a0](x0, x1) equal_sort[a24](cons(x0, x1), cons(x2, x3)) -> equal_sort[a24](x0, x2) and equal_sort[a24](x1, x3) equal_sort[a24](cons(x0, x1), nil) -> false equal_sort[a24](nil, cons(x0, x1)) -> false equal_sort[a24](nil, nil) -> true equal_sort[a42](witness_sort[a42], witness_sort[a42]) -> true if'(true, x59, y44, xs28) -> true if'(false, x68, y51, cons(y11, xs7)) -> if'(eq(x68, y11), x68, y11, xs7) if'(false, x68, y51, nil) -> false del'(x77, nil) -> false equal_bool(eq(x16, y11), true) -> true | del'(x16, cons(y11, xs7)) -> true equal_bool(eq(x16, y11), true) -> false | del'(x16, cons(y11, xs7)) -> del'(x16, xs7) last(cons(x, nil)) -> x last(cons(x7, cons(y4, xs2))) -> last(cons(y4, xs2)) last(nil) -> 0 eq(0, 0) -> true eq(0, s(y24)) -> false eq(s(x41), 0) -> false eq(s(x50), s(y37)) -> eq(x50, y37) if(true, x59, y44, xs28) -> xs28 if(false, x68, y51, cons(y11, xs7)) -> cons(y51, if(eq(x68, y11), x68, y11, xs7)) if(false, x68, y51, nil) -> cons(y51, nil) del(x77, nil) -> nil equal_bool(eq(x16, y11), true) -> true | del(x16, cons(y11, xs7)) -> xs7 equal_bool(eq(x16, y11), true) -> false | del(x16, cons(y11, xs7)) -> cons(y11, del(x16, xs7)) using the following formula: z0:sort[a24].(~(z0=nil)->del'(last(z0), z0)=true) could be successfully shown: (0) Formula (1) Induction by algorithm [EQUIVALENT] (2) AND (3) Formula (4) Symbolic evaluation [EQUIVALENT] (5) Formula (6) Induction by data structure [EQUIVALENT] (7) AND (8) Formula (9) Symbolic evaluation [EQUIVALENT] (10) YES (11) Formula (12) Conditional Evaluation [EQUIVALENT] (13) AND (14) Formula (15) Symbolic evaluation [EQUIVALENT] (16) YES (17) Formula (18) Symbolic evaluation [EQUIVALENT] (19) Formula (20) Hypothesis Lifting [EQUIVALENT] (21) Formula (22) Symbolic evaluation under hypothesis [SOUND] (23) Formula (24) Hypothesis Lifting [EQUIVALENT] (25) Formula (26) Hypothesis Lifting [EQUIVALENT] (27) Formula (28) Conditional Evaluation [EQUIVALENT] (29) AND (30) Formula (31) Symbolic evaluation under hypothesis [EQUIVALENT] (32) YES (33) Formula (34) Symbolic evaluation [EQUIVALENT] (35) YES (36) Formula (37) Symbolic evaluation [EQUIVALENT] (38) YES (39) Formula (40) Symbolic evaluation [EQUIVALENT] (41) Formula (42) Conditional Evaluation [EQUIVALENT] (43) AND (44) Formula (45) Symbolic evaluation [EQUIVALENT] (46) YES (47) Formula (48) Symbolic evaluation under hypothesis [EQUIVALENT] (49) YES ---------------------------------------- (0) Obligation: Formula: z0:sort[a24].(~(z0=nil)->del'(last(z0), z0)=true) There are no hypotheses. ---------------------------------------- (1) Induction by algorithm (EQUIVALENT) Induction by algorithm last(z0) generates the following cases: 1. Base Case: Formula: x:sort[a0].(~(cons(x, nil)=nil)->del'(last(cons(x, nil)), cons(x, nil))=true) There are no hypotheses. 2. Base Case: Formula: (~(nil=nil)->del'(last(nil), nil)=true) There are no hypotheses. 1. Step Case: Formula: x7:sort[a0],y4:sort[a0],xs2:sort[a24].(~(cons(x7, cons(y4, xs2))=nil)->del'(last(cons(x7, cons(y4, xs2))), cons(x7, cons(y4, xs2)))=true) Hypotheses: y4:sort[a0],xs2:sort[a24].del'(last(cons(y4, xs2)), cons(y4, xs2))=true ---------------------------------------- (2) Complex Obligation (AND) ---------------------------------------- (3) Obligation: Formula: x:sort[a0].(~(cons(x, nil)=nil)->del'(last(cons(x, nil)), cons(x, nil))=true) There are no hypotheses. ---------------------------------------- (4) Symbolic evaluation (EQUIVALENT) Could be reduced to the following new obligation by simple symbolic evaluation: x:sort[a0].del'(x, cons(x, nil))=true ---------------------------------------- (5) Obligation: Formula: x:sort[a0].del'(x, cons(x, nil))=true There are no hypotheses. ---------------------------------------- (6) Induction by data structure (EQUIVALENT) Induction by data structure sort[a0] generates the following cases: 1. Base Case: Formula: del'(0, cons(0, nil))=true There are no hypotheses. 1. Step Case: Formula: n:sort[a0].del'(s(n), cons(s(n), nil))=true Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true ---------------------------------------- (7) Complex Obligation (AND) ---------------------------------------- (8) Obligation: Formula: del'(0, cons(0, nil))=true There are no hypotheses. ---------------------------------------- (9) Symbolic evaluation (EQUIVALENT) Could be reduced to the following new obligation by simple symbolic evaluation: True ---------------------------------------- (10) YES ---------------------------------------- (11) Obligation: Formula: n:sort[a0].del'(s(n), cons(s(n), nil))=true Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true ---------------------------------------- (12) Conditional Evaluation (EQUIVALENT) The formula could be reduced to the following new obligations by conditional evaluation: Formula: true=true Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true n:sort[a0].equal_bool(eq(s(n), s(n)), true)=true Formula: n:sort[a0].del'(s(n), nil)=true Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true n:sort[a0].equal_bool(eq(s(n), s(n)), true)=false ---------------------------------------- (13) Complex Obligation (AND) ---------------------------------------- (14) Obligation: Formula: true=true Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true n:sort[a0].equal_bool(eq(s(n), s(n)), true)=true ---------------------------------------- (15) Symbolic evaluation (EQUIVALENT) Could be reduced to the following new obligation by simple symbolic evaluation: True ---------------------------------------- (16) YES ---------------------------------------- (17) Obligation: Formula: n:sort[a0].del'(s(n), nil)=true Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true n:sort[a0].equal_bool(eq(s(n), s(n)), true)=false ---------------------------------------- (18) Symbolic evaluation (EQUIVALENT) Could be reduced to the following new obligation by simple symbolic evaluation: False ---------------------------------------- (19) Obligation: Formula: False Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true n:sort[a0].equal_bool(eq(s(n), s(n)), true)=false ---------------------------------------- (20) Hypothesis Lifting (EQUIVALENT) Formula could be generalised by hypothesis lifting to the following new obligation: Formula: n:sort[a0].((del'(n, cons(n, nil))=true/\equal_bool(eq(s(n), s(n)), true)=false)->False) Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true n:sort[a0].equal_bool(eq(s(n), s(n)), true)=false ---------------------------------------- (21) Obligation: Formula: n:sort[a0].((del'(n, cons(n, nil))=true/\equal_bool(eq(s(n), s(n)), true)=false)->False) Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true n:sort[a0].equal_bool(eq(s(n), s(n)), true)=false ---------------------------------------- (22) Symbolic evaluation under hypothesis (SOUND) Could be reduced by symbolic evaluation under hypothesis to: n:sort[a0].~(equal_bool(eq(n, n), true)=false) By using the following hypotheses: n:sort[a0].del'(n, cons(n, nil))=true ---------------------------------------- (23) Obligation: Formula: n:sort[a0].~(equal_bool(eq(n, n), true)=false) Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true n:sort[a0].equal_bool(eq(s(n), s(n)), true)=false ---------------------------------------- (24) Hypothesis Lifting (EQUIVALENT) Formula could be generalised by hypothesis lifting to the following new obligation: Formula: n:sort[a0].(equal_bool(eq(n, n), true)=false->~(equal_bool(eq(n, n), true)=false)) Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true ---------------------------------------- (25) Obligation: Formula: n:sort[a0].(equal_bool(eq(n, n), true)=false->~(equal_bool(eq(n, n), true)=false)) Hypotheses: n:sort[a0].del'(n, cons(n, nil))=true ---------------------------------------- (26) Hypothesis Lifting (EQUIVALENT) Formula could be generalised by hypothesis lifting to the following new obligation: Formula: n:sort[a0].(del'(n, cons(n, nil))=true->(equal_bool(eq(n, n), true)=false->~(equal_bool(eq(n, n), true)=false))) There are no hypotheses. ---------------------------------------- (27) Obligation: Formula: n:sort[a0].(del'(n, cons(n, nil))=true->(equal_bool(eq(n, n), true)=false->~(equal_bool(eq(n, n), true)=false))) There are no hypotheses. ---------------------------------------- (28) Conditional Evaluation (EQUIVALENT) The formula could be reduced to the following new obligations by conditional evaluation: Formula: n:sort[a0].(true=true->(equal_bool(eq(n, n), true)=false->~(equal_bool(eq(n, n), true)=false))) Hypotheses: n:sort[a0].equal_bool(eq(n, n), true)=true Formula: n:sort[a0].(del'(n, nil)=true->(equal_bool(eq(n, n), true)=false->~(equal_bool(eq(n, n), true)=false))) Hypotheses: n:sort[a0].equal_bool(eq(n, n), true)=false ---------------------------------------- (29) Complex Obligation (AND) ---------------------------------------- (30) Obligation: Formula: n:sort[a0].(true=true->(equal_bool(eq(n, n), true)=false->~(equal_bool(eq(n, n), true)=false))) Hypotheses: n:sort[a0].equal_bool(eq(n, n), true)=true ---------------------------------------- (31) Symbolic evaluation under hypothesis (EQUIVALENT) Could be shown using symbolic evaluation under hypothesis, by using the following hypotheses: n:sort[a0].equal_bool(eq(n, n), true)=true ---------------------------------------- (32) YES ---------------------------------------- (33) Obligation: Formula: n:sort[a0].(del'(n, nil)=true->(equal_bool(eq(n, n), true)=false->~(equal_bool(eq(n, n), true)=false))) Hypotheses: n:sort[a0].equal_bool(eq(n, n), true)=false ---------------------------------------- (34) Symbolic evaluation (EQUIVALENT) Could be reduced to the following new obligation by simple symbolic evaluation: True ---------------------------------------- (35) YES ---------------------------------------- (36) Obligation: Formula: (~(nil=nil)->del'(last(nil), nil)=true) There are no hypotheses. ---------------------------------------- (37) Symbolic evaluation (EQUIVALENT) Could be reduced to the following new obligation by simple symbolic evaluation: True ---------------------------------------- (38) YES ---------------------------------------- (39) Obligation: Formula: x7:sort[a0],y4:sort[a0],xs2:sort[a24].(~(cons(x7, cons(y4, xs2))=nil)->del'(last(cons(x7, cons(y4, xs2))), cons(x7, cons(y4, xs2)))=true) Hypotheses: y4:sort[a0],xs2:sort[a24].del'(last(cons(y4, xs2)), cons(y4, xs2))=true ---------------------------------------- (40) Symbolic evaluation (EQUIVALENT) Could be reduced to the following new obligation by simple symbolic evaluation: y4:sort[a0],xs2:sort[a24],x7:sort[a0].del'(last(cons(y4, xs2)), cons(x7, cons(y4, xs2)))=true ---------------------------------------- (41) Obligation: Formula: y4:sort[a0],xs2:sort[a24],x7:sort[a0].del'(last(cons(y4, xs2)), cons(x7, cons(y4, xs2)))=true Hypotheses: y4:sort[a0],xs2:sort[a24].del'(last(cons(y4, xs2)), cons(y4, xs2))=true ---------------------------------------- (42) Conditional Evaluation (EQUIVALENT) The formula could be reduced to the following new obligations by conditional evaluation: Formula: true=true Hypotheses: y4:sort[a0],xs2:sort[a24].del'(last(cons(y4, xs2)), cons(y4, xs2))=true y4:sort[a0],xs2:sort[a24],x7:sort[a0].equal_bool(eq(last(cons(y4, xs2)), x7), true)=true Formula: y4:sort[a0],xs2:sort[a24].del'(last(cons(y4, xs2)), cons(y4, xs2))=true Hypotheses: y4:sort[a0],xs2:sort[a24].del'(last(cons(y4, xs2)), cons(y4, xs2))=true y4:sort[a0],xs2:sort[a24],x7:sort[a0].equal_bool(eq(last(cons(y4, xs2)), x7), true)=false ---------------------------------------- (43) Complex Obligation (AND) ---------------------------------------- (44) Obligation: Formula: true=true Hypotheses: y4:sort[a0],xs2:sort[a24].del'(last(cons(y4, xs2)), cons(y4, xs2))=true y4:sort[a0],xs2:sort[a24],x7:sort[a0].equal_bool(eq(last(cons(y4, xs2)), x7), true)=true ---------------------------------------- (45) Symbolic evaluation (EQUIVALENT) Could be reduced to the following new obligation by simple symbolic evaluation: True ---------------------------------------- (46) YES ---------------------------------------- (47) Obligation: Formula: y4:sort[a0],xs2:sort[a24].del'(last(cons(y4, xs2)), cons(y4, xs2))=true Hypotheses: y4:sort[a0],xs2:sort[a24].del'(last(cons(y4, xs2)), cons(y4, xs2))=true y4:sort[a0],xs2:sort[a24],x7:sort[a0].equal_bool(eq(last(cons(y4, xs2)), x7), true)=false ---------------------------------------- (48) Symbolic evaluation under hypothesis (EQUIVALENT) Could be shown using symbolic evaluation under hypothesis, by using the following hypotheses: y4:sort[a0],xs2:sort[a24].del'(last(cons(y4, xs2)), cons(y4, xs2))=true ---------------------------------------- (49) YES
last(cons(x, nil)) → x
last(cons(x, cons(y, xs))) → last(cons(y, xs))
del(x, cons(y, xs)) → if(eq(x, y), x, y, xs)
eq(0, 0) → true
eq(0, s(y)) → false
eq(s(x), 0) → false
eq(s(x), s(y)) → eq(x, y)
if(true, x, y, xs) → xs
if(false, x, y, xs) → cons(y, del(x, xs))
del(x, nil) → nil
last(nil)
last(cons(x0, nil))
last(cons(x0, cons(x1, x2)))
del(x0, nil)
del(x0, cons(x1, x2))
if(true, x0, x1, x2)
if(false, x0, x1, x2)
eq(0, 0)
eq(0, s(x0))
eq(s(x0), 0)
eq(s(x0), s(x1))
del'(x16, cons(y11, xs7)) → if'(eq(x16, y11), x16, y11, xs7)
if'(true, x59, y44, xs28) → true
if'(false, x68, y51, xs33) → del'(x68, xs33)
del'(x77, nil) → false
last(cons(x, nil)) → x
last(cons(x7, cons(y4, xs2))) → last(cons(y4, xs2))
del(x16, cons(y11, xs7)) → if(eq(x16, y11), x16, y11, xs7)
eq(0, 0) → true
eq(0, s(y24)) → false
eq(s(x41), 0) → false
eq(s(x50), s(y37)) → eq(x50, y37)
if(true, x59, y44, xs28) → xs28
if(false, x68, y51, xs33) → cons(y51, del(x68, xs33))
del(x77, nil) → nil
last(nil) → 0
equal_bool(true, false) → false
equal_bool(false, true) → false
equal_bool(true, true) → true
equal_bool(false, false) → true
and(true, x) → x
and(false, x) → false
or(true, x) → true
or(false, x) → x
not(false) → true
not(true) → false
isa_true(true) → true
isa_true(false) → false
isa_false(true) → false
isa_false(false) → true
equal_sort[a0](0, 0) → true
equal_sort[a0](0, s(x0)) → false
equal_sort[a0](s(x0), 0) → false
equal_sort[a0](s(x0), s(x1)) → equal_sort[a0](x0, x1)
equal_sort[a24](cons(x0, x1), cons(x2, x3)) → and(equal_sort[a24](x0, x2), equal_sort[a24](x1, x3))
equal_sort[a24](cons(x0, x1), nil) → false
equal_sort[a24](nil, cons(x0, x1)) → false
equal_sort[a24](nil, nil) → true
equal_sort[a42](witness_sort[a42], witness_sort[a42]) → true
nil > 0 > [false, isafalse1] > [del'2, if'4] > [eq2, true, del2, if4, equalsort[a0]2] > cons2
s1 > [false, isafalse1] > [del'2, if'4] > [eq2, true, del2, if4, equalsort[a0]2] > cons2
equalbool2 > [false, isafalse1] > [del'2, if'4] > [eq2, true, del2, if4, equalsort[a0]2] > cons2
not1 > [false, isafalse1] > [del'2, if'4] > [eq2, true, del2, if4, equalsort[a0]2] > cons2
isatrue1 > [false, isafalse1] > [del'2, if'4] > [eq2, true, del2, if4, equalsort[a0]2] > cons2
equalsort[a24]2 > [eq2, true, del2, if4, equalsort[a0]2] > cons2
equalsort[a24]2 > and2
equalsort[a42]2 > [eq2, true, del2, if4, equalsort[a0]2] > cons2
del'2: [2,1]
cons2: multiset
if'4: [4,2,1,3]
eq2: [1,2]
true: multiset
false: multiset
nil: multiset
del2: [1,2]
if4: [2,4,1,3]
0: multiset
s1: multiset
equalbool2: [2,1]
and2: multiset
or2: [1,2]
not1: multiset
isatrue1: multiset
isafalse1: [1]
equalsort[a0]2: multiset
equalsort[a24]2: multiset
equalsort[a42]2: [1,2]
witnesssort[a42]: multiset
del'(x16, cons(y11, xs7)) → if'(eq(x16, y11), x16, y11, xs7)
if'(true, x59, y44, xs28) → true
if'(false, x68, y51, xs33) → del'(x68, xs33)
del'(x77, nil) → false
last(cons(x, nil)) → x
last(cons(x7, cons(y4, xs2))) → last(cons(y4, xs2))
del(x16, cons(y11, xs7)) → if(eq(x16, y11), x16, y11, xs7)
eq(0, 0) → true
eq(0, s(y24)) → false
eq(s(x41), 0) → false
eq(s(x50), s(y37)) → eq(x50, y37)
if(true, x59, y44, xs28) → xs28
if(false, x68, y51, xs33) → cons(y51, del(x68, xs33))
del(x77, nil) → nil
last(nil) → 0
equal_bool(true, false) → false
equal_bool(false, true) → false
equal_bool(true, true) → true
equal_bool(false, false) → true
and(true, x) → x
and(false, x) → false
or(true, x) → true
or(false, x) → x
not(false) → true
not(true) → false
isa_true(true) → true
isa_true(false) → false
isa_false(true) → false
isa_false(false) → true
equal_sort[a0](0, 0) → true
equal_sort[a0](0, s(x0)) → false
equal_sort[a0](s(x0), 0) → false
equal_sort[a0](s(x0), s(x1)) → equal_sort[a0](x0, x1)
equal_sort[a24](cons(x0, x1), cons(x2, x3)) → and(equal_sort[a24](x0, x2), equal_sort[a24](x1, x3))
equal_sort[a24](cons(x0, x1), nil) → false
equal_sort[a24](nil, cons(x0, x1)) → false
equal_sort[a24](nil, nil) → true
equal_sort[a42](witness_sort[a42], witness_sort[a42]) → true