let C be non empty set ; :: thesis: for V being non empty add-associative addLoopStr
for f1, f2, f3 being PartFunc of C,V holds (f1 + f2) + f3 = f1 + (f2 + f3)

let V be non empty add-associative addLoopStr ; :: thesis: for f1, f2, f3 being PartFunc of C,V holds (f1 + f2) + f3 = f1 + (f2 + f3)
let f1, f2, f3 be PartFunc of C,V; :: thesis: (f1 + f2) + f3 = f1 + (f2 + f3)
A1: dom ((f1 + f2) + f3) = (dom (f1 + f2)) /\ (dom f3) by Def1
.= ((dom f1) /\ (dom f2)) /\ (dom f3) by Def1
.= (dom f1) /\ ((dom f2) /\ (dom f3)) by XBOOLE_1:16
.= (dom f1) /\ (dom (f2 + f3)) by Def1
.= dom (f1 + (f2 + f3)) by Def1 ;
now :: thesis: for c being Element of C st c in dom ((f1 + f2) + f3) holds
((f1 + f2) + f3) /. c = (f1 + (f2 + f3)) /. c
let c be Element of C; :: thesis: ( c in dom ((f1 + f2) + f3) implies ((f1 + f2) + f3) /. c = (f1 + (f2 + f3)) /. c )
assume A2: c in dom ((f1 + f2) + f3) ; :: thesis: ((f1 + f2) + f3) /. c = (f1 + (f2 + f3)) /. c
then c in (dom (f1 + f2)) /\ (dom f3) by Def1;
then A3: c in dom (f1 + f2) by XBOOLE_0:def 4;
c in (dom f1) /\ (dom (f2 + f3)) by A1, A2, Def1;
then A4: c in dom (f2 + f3) by XBOOLE_0:def 4;
thus ((f1 + f2) + f3) /. c = ((f1 + f2) /. c) + (f3 /. c) by A2, Def1
.= ((f1 /. c) + (f2 /. c)) + (f3 /. c) by A3, Def1
.= (f1 /. c) + ((f2 /. c) + (f3 /. c)) by RLVECT_1:def 3
.= (f1 /. c) + ((f2 + f3) /. c) by A4, Def1
.= (f1 + (f2 + f3)) /. c by A1, A2, Def1 ; :: thesis: verum
end;
hence (f1 + f2) + f3 = f1 + (f2 + f3) by A1, PARTFUN2:1; :: thesis: verum