def u64_op
bend-collections-laws-math@1.0.0.0 · src/math/instances.bend:92
import bend-collections-laws-math@1.0.0.0/src/math/instances.bend as Instances
import Base
import bend-collections-laws-math@1.0.0.0/src/math/num.bend as N
import bend-collections-laws-math@1.0.0.0/src/math/u64.bend as W
import bend-collections-laws-math@1.0.0.0/src/math/w64.bend as X
import bend-collections-laws-math@1.0.0.0/src/math/natural.bend as M
92def u64_op(o: N.Op<W.U64>) -> W.U64:
93 match o:
94 case N.ZeroOp{}:
95 W.U64{0, 0}
96 case N.One{}:
97 W.U64{1, 0}
98 case N.Add{a, b}:
99 X.add(a, b)
100 case N.Sub{a, b}:
101 X.sub(a, b)
102 case N.Mul{a, b}:
103 X.mul(a, b)
104 case N.Neg{a}:
105 X.sub(W.U64{0, 0}, a)
106 case N.Abs{a}:
107 a
108 case N.Quot{a, b}:
109 X.quot(a, b)
110 case N.Rem{a, b}:
111 X.rem(a, b)
112 case N.Half{a}:
113 X.half(a)
114 case N.MulMod{a, b, m}:
115 X.mulmod(a, b, m)
116 case N.Pow2{k}:
117 u64_pow2(k)
118 case N.Sqrt{a}:
119 X.isqrt(a)
120 case N.PowMod{a, e, m}:
121 X.mpow(a, e, m)
122
123 case N.GcdSmall{a, b}:
124 X.of48(M.gcd(X.n48(a), X.n48(b)))