Leo field division operation.
(op-field-div left right curve) → result
Function:
(defun op-field-div (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-div)) (declare (ignorable __function__)) (b* ((err (list :op-field-div (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)) ((when (= y 0)) (reserrf err))) (value-field (pfield::div x y p)))))
Theorem:
(defthm value-resultp-of-op-field-div (b* ((result (op-field-div left right curve))) (value-resultp result)) :rule-classes :rewrite)
Theorem:
(defthm op-field-div-of-value-fix-left (equal (op-field-div (value-fix left) right curve) (op-field-div left right curve)))
Theorem:
(defthm op-field-div-value-equiv-congruence-on-left (implies (value-equiv left left-equiv) (equal (op-field-div left right curve) (op-field-div left-equiv right curve))) :rule-classes :congruence)
Theorem:
(defthm op-field-div-of-value-fix-right (equal (op-field-div left (value-fix right) curve) (op-field-div left right curve)))
Theorem:
(defthm op-field-div-value-equiv-congruence-on-right (implies (value-equiv right right-equiv) (equal (op-field-div left right curve) (op-field-div left right-equiv curve))) :rule-classes :congruence)
Theorem:
(defthm op-field-div-of-curve-fix-curve (equal (op-field-div left right (curve-fix curve)) (op-field-div left right curve)))
Theorem:
(defthm op-field-div-curve-equiv-congruence-on-curve (implies (curve-equiv curve curve-equiv) (equal (op-field-div left right curve) (op-field-div left right curve-equiv))) :rule-classes :congruence)