Leo scalar field value addition operation.
(op-scalar-add left right curve) → result
Function:
(defun op-scalar-add (left right curve) (declare (xargs :guard (and (valuep left) (valuep right) (curvep curve)))) (declare (xargs :guard (and (value-case left :scalar) (value-case right :scalar)))) (let ((__function__ 'op-scalar-add)) (declare (ignorable __function__)) (b* ((r (curve-scalar-prime curve)) (err (list :op-scalar-add (value-fix left) (value-fix right))) (x (value-scalar->get left)) (y (value-scalar->get right)) ((unless (pfield::fep x r)) (reserrf err)) ((unless (pfield::fep y r)) (reserrf err))) (value-scalar (pfield::add x y r)))))
Theorem:
(defthm value-resultp-of-op-scalar-add (b* ((result (op-scalar-add left right curve))) (value-resultp result)) :rule-classes :rewrite)
Theorem:
(defthm op-scalar-add-of-value-fix-left (equal (op-scalar-add (value-fix left) right curve) (op-scalar-add left right curve)))
Theorem:
(defthm op-scalar-add-value-equiv-congruence-on-left (implies (value-equiv left left-equiv) (equal (op-scalar-add left right curve) (op-scalar-add left-equiv right curve))) :rule-classes :congruence)
Theorem:
(defthm op-scalar-add-of-value-fix-right (equal (op-scalar-add left (value-fix right) curve) (op-scalar-add left right curve)))
Theorem:
(defthm op-scalar-add-value-equiv-congruence-on-right (implies (value-equiv right right-equiv) (equal (op-scalar-add left right curve) (op-scalar-add left right-equiv curve))) :rule-classes :congruence)
Theorem:
(defthm op-scalar-add-of-curve-fix-curve (equal (op-scalar-add left right (curve-fix curve)) (op-scalar-add left right curve)))
Theorem:
(defthm op-scalar-add-curve-equiv-congruence-on-curve (implies (curve-equiv curve curve-equiv) (equal (op-scalar-add left right curve) (op-scalar-add left right curve-equiv))) :rule-classes :congruence)