Certification Problem

Input (TPDB TRS_Equational/Mixed_AC/RENAMED-BOOL_nokinds-noand)

The rewrite relation of the following equational TRS is considered.

U101(tt,A,B) U102(isBool(B),A,B) (1)
U102(tt,A,B) _xor_(_and_(A,B),_xor_(A,B)) (2)
U11(tt,A) A (3)
U111(tt) false (4)
U121(tt,A) A (5)
U131(tt,B,U',U) U132(isS(U'),B,U',U) (6)
U132(tt,B,U',U) U133(isS(U),B,U') (7)
U133(tt,B,U') U134(equal(_isNotEqualTo_(B,true),true),U') (8)
U134(tt,U') U' (9)
U141(tt,U) U142(isS(U),U) (10)
U142(tt,U) U (11)
U151(tt,V2) U152(isBool(V2)) (12)
U152(tt) tt (13)
U161(tt,V2) U162(isBool(V2)) (14)
U162(tt) tt (15)
U171(tt,V2) U172(isUniversal(V2)) (16)
U172(tt) tt (17)
U181(tt,V2) U182(isUniversal(V2)) (18)
U182(tt) tt (19)
U191(tt,V2) U192(isBool(V2)) (20)
U192(tt) tt (21)
U201(tt,V2) U202(isBool(V2)) (22)
U202(tt) tt (23)
U21(tt,A,B,C) U22(isBool(B),A,B,C) (24)
U211(tt) tt (25)
U22(tt,A,B,C) U23(isBool(C),A,B,C) (26)
U221(tt,A) _xor_(A,true) (27)
U23(tt,A,B,C) _xor_(_and_(A,B),_and_(A,C)) (28)
U31(tt) false (29)
U41(tt,A) A (30)
U51(tt,A,B) U52(isBool(B),A,B) (31)
U52(tt,A,B) not_(_xor_(A,_and_(A,B))) (32)
U61(tt,U',U) U62(isS(U),U',U) (33)
U62(tt,U',U) U63(equal(_isNotEqualTo_(U,U'),true)) (34)
U63(tt) false (35)
U71(tt) true (36)
U81(tt,U',U) U82(isS(U),U',U) (37)
U82(tt,U',U) if_then_else_fi(_isEqualTo_(U,U'),false,true) (38)
U91(tt) false (39)
_and_(A,A) U11(isBool(A),A) (40)
_and_(A,_xor_(B,C)) U21(isBool(A),A,B,C) (41)
_and_(false,A) U31(isBool(A)) (42)
_and_(true,A) U41(isBool(A),A) (43)
_implies_(A,B) U51(isBool(A),A,B) (44)
_isEqualTo_(U,U') U61(isS(U'),U',U) (45)
_isEqualTo_(U,U) U71(isS(U)) (46)
_isNotEqualTo_(U,U') U81(isS(U'),U',U) (47)
_isNotEqualTo_(U,U) U91(isS(U)) (48)
_or_(A,B) U101(isBool(A),A,B) (49)
_xor_(A,A) U111(isBool(A)) (50)
_xor_(false,A) U121(isBool(A),A) (51)
equal(X,X) tt (52)
if_then_else_fi(B,U,U') U131(isBool(B),B,U',U) (53)
if_then_else_fi(true,U,U') U141(isS(U'),U) (54)
isBool(false) tt (55)
isBool(true) tt (56)
isBool(_and_(V1,V2)) U151(isBool(V1),V2) (57)
isBool(_implies_(V1,V2)) U161(isBool(V1),V2) (58)
isBool(_isEqualTo_(V1,V2)) U171(isUniversal(V1),V2) (59)
isBool(_isNotEqualTo_(V1,V2)) U181(isUniversal(V1),V2) (60)
isBool(_or_(V1,V2)) U191(isBool(V1),V2) (61)
isBool(_xor_(V1,V2)) U201(isBool(V1),V2) (62)
isBool(not_(V1)) U211(isBool(V1)) (63)
not_(A) U221(isBool(A),A) (64)
not_(false) true (65)
not_(true) false (66)

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) U102#(isBool(B),A,B) (82)
U101#(tt,A,B) isBool#(B) (83)
U102#(tt,A,B) _xor_#(_and_(A,B),_xor_(A,B)) (84)
U102#(tt,A,B) _and_#(A,B) (85)
U102#(tt,A,B) _xor_#(A,B) (86)
U131#(tt,B,U',U) U132#(isS(U'),B,U',U) (87)
U132#(tt,B,U',U) U133#(isS(U),B,U') (88)
U133#(tt,B,U') U134#(equal(_isNotEqualTo_(B,true),true),U') (89)
U133#(tt,B,U') equal#(_isNotEqualTo_(B,true),true) (90)
U133#(tt,B,U') _isNotEqualTo_#(B,true) (91)
U141#(tt,U) U142#(isS(U),U) (92)
U151#(tt,V2) U152#(isBool(V2)) (93)
U151#(tt,V2) isBool#(V2) (94)
U161#(tt,V2) U162#(isBool(V2)) (95)
U161#(tt,V2) isBool#(V2) (96)
U171#(tt,V2) U172#(isUniversal(V2)) (97)
U181#(tt,V2) U182#(isUniversal(V2)) (98)
U191#(tt,V2) U192#(isBool(V2)) (99)
U191#(tt,V2) isBool#(V2) (100)
U201#(tt,V2) U202#(isBool(V2)) (101)
U201#(tt,V2) isBool#(V2) (102)
U21#(tt,A,B,C) U22#(isBool(B),A,B,C) (103)
U21#(tt,A,B,C) isBool#(B) (104)
U22#(tt,A,B,C) U23#(isBool(C),A,B,C) (105)
U22#(tt,A,B,C) isBool#(C) (106)
U221#(tt,A) _xor_#(A,true) (107)
U23#(tt,A,B,C) _xor_#(_and_(A,B),_and_(A,C)) (108)
U23#(tt,A,B,C) _and_#(A,B) (109)
U23#(tt,A,B,C) _and_#(A,C) (110)
U51#(tt,A,B) U52#(isBool(B),A,B) (111)
U51#(tt,A,B) isBool#(B) (112)
U52#(tt,A,B) not_#(_xor_(A,_and_(A,B))) (113)
U52#(tt,A,B) _xor_#(A,_and_(A,B)) (114)
U52#(tt,A,B) _and_#(A,B) (115)
U61#(tt,U',U) U62#(isS(U),U',U) (116)
U62#(tt,U',U) U63#(equal(_isNotEqualTo_(U,U'),true)) (117)
U62#(tt,U',U) equal#(_isNotEqualTo_(U,U'),true) (118)
U62#(tt,U',U) _isNotEqualTo_#(U,U') (119)
U81#(tt,U',U) U82#(isS(U),U',U) (120)
U82#(tt,U',U) if_then_else_fi#(_isEqualTo_(U,U'),false,true) (121)
U82#(tt,U',U) _isEqualTo_#(U,U') (122)
_and_#(A,A) U11#(isBool(A),A) (123)
_and_#(A,A) isBool#(A) (124)
_and_#(A,_xor_(B,C)) U21#(isBool(A),A,B,C) (125)
_and_#(A,_xor_(B,C)) isBool#(A) (126)
_and_#(false,A) U31#(isBool(A)) (127)
_and_#(false,A) isBool#(A) (128)
_and_#(true,A) U41#(isBool(A),A) (129)
_and_#(true,A) isBool#(A) (130)
_implies_#(A,B) U51#(isBool(A),A,B) (131)
_implies_#(A,B) isBool#(A) (132)
_isEqualTo_#(U,U') U61#(isS(U'),U',U) (133)
_isEqualTo_#(U,U) U71#(isS(U)) (134)
_isNotEqualTo_#(U,U') U81#(isS(U'),U',U) (135)
_isNotEqualTo_#(U,U) U91#(isS(U)) (136)
_or_#(A,B) U101#(isBool(A),A,B) (137)
_or_#(A,B) isBool#(A) (138)
_xor_#(A,A) U111#(isBool(A)) (139)
_xor_#(A,A) isBool#(A) (140)
_xor_#(false,A) U121#(isBool(A),A) (141)
_xor_#(false,A) isBool#(A) (142)
if_then_else_fi#(B,U,U') U131#(isBool(B),B,U',U) (143)
if_then_else_fi#(B,U,U') isBool#(B) (144)
if_then_else_fi#(true,U,U') U141#(isS(U'),U) (145)
isBool#(_and_(V1,V2)) U151#(isBool(V1),V2) (146)
isBool#(_and_(V1,V2)) isBool#(V1) (147)
isBool#(_implies_(V1,V2)) U161#(isBool(V1),V2) (148)
isBool#(_implies_(V1,V2)) isBool#(V1) (149)
isBool#(_isEqualTo_(V1,V2)) U171#(isUniversal(V1),V2) (150)
isBool#(_isNotEqualTo_(V1,V2)) U181#(isUniversal(V1),V2) (151)
isBool#(_or_(V1,V2)) U191#(isBool(V1),V2) (152)
isBool#(_or_(V1,V2)) isBool#(V1) (153)
isBool#(_xor_(V1,V2)) U201#(isBool(V1),V2) (154)
isBool#(_xor_(V1,V2)) isBool#(V1) (155)
isBool#(not_(V1)) U211#(isBool(V1)) (156)
isBool#(not_(V1)) isBool#(V1) (157)
not_#(A) U221#(isBool(A),A) (158)
not_#(A) isBool#(A) (159)
_and_#(_and_(A,A),ext) _and_#(U11(isBool(A),A),ext) (160)
_and_#(_and_(A,A),ext) U11#(isBool(A),A) (161)
_and_#(_and_(A,A),ext) isBool#(A) (162)
_and_#(_and_(A,_xor_(B,C)),ext) _and_#(U21(isBool(A),A,B,C),ext) (163)
_and_#(_and_(A,_xor_(B,C)),ext) U21#(isBool(A),A,B,C) (164)
_and_#(_and_(A,_xor_(B,C)),ext) isBool#(A) (165)
_and_#(_and_(false,A),ext) _and_#(U31(isBool(A)),ext) (166)
_and_#(_and_(false,A),ext) U31#(isBool(A)) (167)
_and_#(_and_(false,A),ext) isBool#(A) (168)
_and_#(_and_(true,A),ext) _and_#(U41(isBool(A),A),ext) (169)
_and_#(_and_(true,A),ext) U41#(isBool(A),A) (170)
_and_#(_and_(true,A),ext) isBool#(A) (171)
_or_#(_or_(A,B),ext) _or_#(U101(isBool(A),A,B),ext) (172)
_or_#(_or_(A,B),ext) U101#(isBool(A),A,B) (173)
_or_#(_or_(A,B),ext) isBool#(A) (174)
_xor_#(_xor_(A,A),ext) _xor_#(U111(isBool(A)),ext) (175)
_xor_#(_xor_(A,A),ext) U111#(isBool(A)) (176)
_xor_#(_xor_(A,A),ext) isBool#(A) (177)
_xor_#(_xor_(false,A),ext) _xor_#(U121(isBool(A),A),ext) (178)
_xor_#(_xor_(false,A),ext) U121#(isBool(A),A) (179)
_xor_#(_xor_(false,A),ext) isBool#(A) (180)
The extended rules of the TRS
_and_(_and_(A,A),ext) _and_(U11(isBool(A),A),ext) (181)
_and_(_and_(A,_xor_(B,C)),ext) _and_(U21(isBool(A),A,B,C),ext) (182)
_and_(_and_(false,A),ext) _and_(U31(isBool(A)),ext) (183)
_and_(_and_(true,A),ext) _and_(U41(isBool(A),A),ext) (184)
_or_(_or_(A,B),ext) _or_(U101(isBool(A),A,B),ext) (185)
_xor_(_xor_(A,A),ext) _xor_(U111(isBool(A)),ext) (186)
_xor_(_xor_(false,A),ext) _xor_(U121(isBool(A),A),ext) (187)
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.