package Ġx . scratch Ċ Ċ interface ĠGroup Companion < T Ġ: ĠGroup < T >> Ġ{ ĊĠĠĠ Ġval ĠZERO : ĠT Ċ } Ċ Ċ interface ĠGroup < T Ġ: ĠGroup < T >> Ġ{ ĊĠĠĠ Ġval Ġcompanion : ĠGroup Companion < T > ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoperator Ġfun Ġunary Plus (): ĠT Ġ= Ġthis Ġas ĠT ĊĠĠĠ Ġoperator Ġfun Ġunary Minus (): ĠT ĊĠĠĠ Ġoperator Ġfun Ġplus ( add end : ĠT ): ĠT ĊĠĠĠ Ġoperator Ġfun Ġminus ( sub tr ah end : ĠT ): ĠT Ġ= Ġthis Ġ+ Ġ- sub tr ah end Ċ } Ċ Ċ interface ĠRing Companion < T Ġ: ĠRing < T >> Ġ: ĠGroup Companion < T > Ġ{ ĊĠĠĠ Ġval ĠONE : ĠT Ċ } Ċ Ċ interface ĠRing < T Ġ: ĠRing < T >> Ġ: ĠGroup < T > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġcompanion : ĠRing Companion < T > ĊĊĠĠĠ Ġoperator Ġfun Ġtimes ( multip lic and : ĠT ): ĠT Ċ } Ċ Ċ interface ĠField Companion < T Ġ: ĠField < T >> Ġ: ĠRing Companion < T > Ċ Ċ interface ĠField < T Ġ: ĠField < T >> Ġ: ĠRing < T > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġcompanion : ĠField Companion < T > ĊĊĠĠĠ Ġfun Ġunary Div (): ĠT Ġ// ĠP ret end Ġa Ġpseudo - operator ĊĊĠĠĠ Ġoperator Ġfun Ġdiv ( div isor : ĠT ): ĠT Ġ= Ġthis Ġ* Ġdivisor . unary Div () Ċ } Ċ