Certification Problem

Input (TPDB TRS_Equational/Mixed_AC/RENAMED-BOOL_nokinds)

The rewrite relation of the following equational TRS is considered.

U101(tt,A,B) _xor_(_and_(A,B),_xor_(A,B)) (1)
U11(tt,A) A (2)
U111(tt) false (3)
U121(tt,A) A (4)
U131(tt,B,U') U132(equal(_isNotEqualTo_(B,true),true),U') (5)
U132(tt,U') U' (6)
U141(tt,U) U (7)
U151(tt,A) _xor_(A,true) (8)
U21(tt,A,B,C) _xor_(_and_(A,B),_and_(A,C)) (9)
U31(tt) false (10)
U41(tt,A) A (11)
U51(tt,A,B) not_(_xor_(A,_and_(A,B))) (12)
U61(tt,U',U) U62(equal(_isNotEqualTo_(U,U'),true)) (13)
U62(tt) false (14)
U71(tt) true (15)
U81(tt,U',U) if_then_else_fi(_isEqualTo_(U,U'),false,true) (16)
U91(tt) false (17)
_and_(A,A) U11(isBool(A),A) (18)
_and_(A,_xor_(B,C)) U21(and(isBool(A),and(isBool(B),isBool(C))),A,B,C) (19)
_and_(false,A) U31(isBool(A)) (20)
_and_(true,A) U41(isBool(A),A) (21)
_implies_(A,B) U51(and(isBool(A),isBool(B)),A,B) (22)
_isEqualTo_(U,U') U61(and(isS(U'),isS(U)),U',U) (23)
_isEqualTo_(U,U) U71(isS(U)) (24)
_isNotEqualTo_(U,U') U81(and(isS(U'),isS(U)),U',U) (25)
_isNotEqualTo_(U,U) U91(isS(U)) (26)
_or_(A,B) U101(and(isBool(A),isBool(B)),A,B) (27)
_xor_(A,A) U111(isBool(A)) (28)
_xor_(false,A) U121(isBool(A),A) (29)
and(tt,X) X (30)
equal(X,X) tt (31)
if_then_else_fi(B,U,U') U131(and(isBool(B),and(isS(U'),isS(U))),B,U') (32)
if_then_else_fi(true,U,U') U141(and(isS(U'),isS(U)),U) (33)
isBool(false) tt (34)
isBool(true) tt (35)
isBool(_and_(V1,V2)) and(isBool(V1),isBool(V2)) (36)
isBool(_implies_(V1,V2)) and(isBool(V1),isBool(V2)) (37)
isBool(_isEqualTo_(V1,V2)) and(isUniversal(V1),isUniversal(V2)) (38)
isBool(_isNotEqualTo_(V1,V2)) and(isUniversal(V1),isUniversal(V2)) (39)
isBool(_or_(V1,V2)) and(isBool(V1),isBool(V2)) (40)
isBool(_xor_(V1,V2)) and(isBool(V1),isBool(V2)) (41)
isBool(not_(V1)) isBool(V1) (42)
not_(A) U151(isBool(A),A) (43)
not_(false) true (44)
not_(true) false (45)

Associative symbols: _and_, _or_, _xor_

Commutative symbols: _and_, _or_, _xor_

Property / Task

Prove or disprove termination.

Answer / Result

Yes.

Proof (by AProVE @ termCOMP 2023)

1 AC Dependency Pair Transformation

The following set of (strict) dependency pairs is constructed for the TRS.

U101#(tt,A,B) _xor_#(_and_(A,B),_xor_(A,B)) (61)
U101#(tt,A,B) _and_#(A,B) (62)
U101#(tt,A,B) _xor_#(A,B) (63)
U131#(tt,B,U') U132#(equal(_isNotEqualTo_(B,true),true),U') (64)
U131#(tt,B,U') equal#(_isNotEqualTo_(B,true),true) (65)
U131#(tt,B,U') _isNotEqualTo_#(B,true) (66)
U151#(tt,A) _xor_#(A,true) (67)
U21#(tt,A,B,C) _xor_#(_and_(A,B),_and_(A,C)) (68)
U21#(tt,A,B,C) _and_#(A,B) (69)
U21#(tt,A,B,C) _and_#(A,C) (70)
U51#(tt,A,B) not_#(_xor_(A,_and_(A,B))) (71)
U51#(tt,A,B) _xor_#(A,_and_(A,B)) (72)
U51#(tt,A,B) _and_#(A,B) (73)
U61#(tt,U',U) U62#(equal(_isNotEqualTo_(U,U'),true)) (74)
U61#(tt,U',U) equal#(_isNotEqualTo_(U,U'),true) (75)
U61#(tt,U',U) _isNotEqualTo_#(U,U') (76)
U81#(tt,U',U) if_then_else_fi#(_isEqualTo_(U,U'),false,true) (77)
U81#(tt,U',U) _isEqualTo_#(U,U') (78)
_and_#(A,A) U11#(isBool(A),A) (79)
_and_#(A,A) isBool#(A) (80)
_and_#(A,_xor_(B,C)) U21#(and(isBool(A),and(isBool(B),isBool(C))),A,B,C) (81)
_and_#(A,_xor_(B,C)) and#(isBool(A),and(isBool(B),isBool(C))) (82)
_and_#(A,_xor_(B,C)) isBool#(A) (83)
_and_#(A,_xor_(B,C)) and#(isBool(B),isBool(C)) (84)
_and_#(A,_xor_(B,C)) isBool#(B) (85)
_and_#(A,_xor_(B,C)) isBool#(C) (86)
_and_#(false,A) U31#(isBool(A)) (87)
_and_#(false,A) isBool#(A) (88)
_and_#(true,A) U41#(isBool(A),A) (89)
_and_#(true,A) isBool#(A) (90)
_implies_#(A,B) U51#(and(isBool(A),isBool(B)),A,B) (91)
_implies_#(A,B) and#(isBool(A),isBool(B)) (92)
_implies_#(A,B) isBool#(A) (93)
_implies_#(A,B) isBool#(B) (94)
_isEqualTo_#(U,U') U61#(and(isS(U'),isS(U)),U',U) (95)
_isEqualTo_#(U,U') and#(isS(U'),isS(U)) (96)
_isEqualTo_#(U,U) U71#(isS(U)) (97)
_isNotEqualTo_#(U,U') U81#(and(isS(U'),isS(U)),U',U) (98)
_isNotEqualTo_#(U,U') and#(isS(U'),isS(U)) (99)
_isNotEqualTo_#(U,U) U91#(isS(U)) (100)
_or_#(A,B) U101#(and(isBool(A),isBool(B)),A,B) (101)
_or_#(A,B) and#(isBool(A),isBool(B)) (102)
_or_#(A,B) isBool#(A) (103)
_or_#(A,B) isBool#(B) (104)
_xor_#(A,A) U111#(isBool(A)) (105)
_xor_#(A,A) isBool#(A) (106)
_xor_#(false,A) U121#(isBool(A),A) (107)
_xor_#(false,A) isBool#(A) (108)
if_then_else_fi#(B,U,U') U131#(and(isBool(B),and(isS(U'),isS(U))),B,U') (109)
if_then_else_fi#(B,U,U') and#(isBool(B),and(isS(U'),isS(U))) (110)
if_then_else_fi#(B,U,U') isBool#(B) (111)
if_then_else_fi#(B,U,U') and#(isS(U'),isS(U)) (112)
if_then_else_fi#(true,U,U') U141#(and(isS(U'),isS(U)),U) (113)
if_then_else_fi#(true,U,U') and#(isS(U'),isS(U)) (114)
isBool#(_and_(V1,V2)) and#(isBool(V1),isBool(V2)) (115)
isBool#(_and_(V1,V2)) isBool#(V1) (116)
isBool#(_and_(V1,V2)) isBool#(V2) (117)
isBool#(_implies_(V1,V2)) and#(isBool(V1),isBool(V2)) (118)
isBool#(_implies_(V1,V2)) isBool#(V1) (119)
isBool#(_implies_(V1,V2)) isBool#(V2) (120)
isBool#(_isEqualTo_(V1,V2)) and#(isUniversal(V1),isUniversal(V2)) (121)
isBool#(_isNotEqualTo_(V1,V2)) and#(isUniversal(V1),isUniversal(V2)) (122)
isBool#(_or_(V1,V2)) and#(isBool(V1),isBool(V2)) (123)
isBool#(_or_(V1,V2)) isBool#(V1) (124)
isBool#(_or_(V1,V2)) isBool#(V2) (125)
isBool#(_xor_(V1,V2)) and#(isBool(V1),isBool(V2)) (126)
isBool#(_xor_(V1,V2)) isBool#(V1) (127)
isBool#(_xor_(V1,V2)) isBool#(V2) (128)
isBool#(not_(V1)) isBool#(V1) (129)
not_#(A) U151#(isBool(A),A) (130)
not_#(A) isBool#(A) (131)
_and_#(_and_(A,A),ext) _and_#(U11(isBool(A),A),ext) (132)
_and_#(_and_(A,A),ext) U11#(isBool(A),A) (133)
_and_#(_and_(A,A),ext) isBool#(A) (134)
_and_#(_and_(A,_xor_(B,C)),ext) _and_#(U21(and(isBool(A),and(isBool(B),isBool(C))),A,B,C),ext) (135)
_and_#(_and_(A,_xor_(B,C)),ext) U21#(and(isBool(A),and(isBool(B),isBool(C))),A,B,C) (136)
_and_#(_and_(A,_xor_(B,C)),ext) and#(isBool(A),and(isBool(B),isBool(C))) (137)
_and_#(_and_(A,_xor_(B,C)),ext) isBool#(A) (138)
_and_#(_and_(A,_xor_(B,C)),ext) and#(isBool(B),isBool(C)) (139)
_and_#(_and_(A,_xor_(B,C)),ext) isBool#(B) (140)
_and_#(_and_(A,_xor_(B,C)),ext) isBool#(C) (141)
_and_#(_and_(false,A),ext) _and_#(U31(isBool(A)),ext) (142)
_and_#(_and_(false,A),ext) U31#(isBool(A)) (143)
_and_#(_and_(false,A),ext) isBool#(A) (144)
_and_#(_and_(true,A),ext) _and_#(U41(isBool(A),A),ext) (145)
_and_#(_and_(true,A),ext) U41#(isBool(A),A) (146)
_and_#(_and_(true,A),ext) isBool#(A) (147)
_or_#(_or_(A,B),ext) _or_#(U101(and(isBool(A),isBool(B)),A,B),ext) (148)
_or_#(_or_(A,B),ext) U101#(and(isBool(A),isBool(B)),A,B) (149)
_or_#(_or_(A,B),ext) and#(isBool(A),isBool(B)) (150)
_or_#(_or_(A,B),ext) isBool#(A) (151)
_or_#(_or_(A,B),ext) isBool#(B) (152)
_xor_#(_xor_(A,A),ext) _xor_#(U111(isBool(A)),ext) (153)
_xor_#(_xor_(A,A),ext) U111#(isBool(A)) (154)
_xor_#(_xor_(A,A),ext) isBool#(A) (155)
_xor_#(_xor_(false,A),ext) _xor_#(U121(isBool(A),A),ext) (156)
_xor_#(_xor_(false,A),ext) U121#(isBool(A),A) (157)
_xor_#(_xor_(false,A),ext) isBool#(A) (158)
The extended rules of the TRS
_and_(_and_(A,A),ext) _and_(U11(isBool(A),A),ext) (159)
_and_(_and_(A,_xor_(B,C)),ext) _and_(U21(and(isBool(A),and(isBool(B),isBool(C))),A,B,C),ext) (160)
_and_(_and_(false,A),ext) _and_(U31(isBool(A)),ext) (161)
_and_(_and_(true,A),ext) _and_(U41(isBool(A),A),ext) (162)
_or_(_or_(A,B),ext) _or_(U101(and(isBool(A),isBool(B)),A,B),ext) (163)
_xor_(_xor_(A,A),ext) _xor_(U111(isBool(A)),ext) (164)
_xor_(_xor_(false,A),ext) _xor_(U121(isBool(A),A),ext) (165)
give rise to even more dependency pairs (by sharping the root symbols of each rule). Finiteness for all DPs in combination with the equational DPs is proven as follows.

1.1 Dependency Graph Processor

The dependency pairs are split into 4 components.