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