def F_mono

bend-kit-collections@0.1.4.1 · nat_order.bend:128

import bend-kit-collections@0.1.4.1/nat_order.bend as NatOrder
import Base
import bend-mathlib@0.7.4.0/nat.bend as MNat
import bend-mathlib@0.7.4.0/bool.bend as MBool

128def F_mono(p: Lin, q: Lin, v: Vs, +h: {lle(p, q) == True{} : Bool}) -> LE(F(p, v), F(q, v)):
129  match p q v:
130    case L{+a0, +a1, +a2, +a3, +a4} L{+b0, +b1, +b2, +b3, +b4} VS{+v1, +v2, +v3, +v4}:
131      +l0 = Nat.is_le(a0, b0)
132      +l1 = Nat.is_le(a1, b1)
133      +l2 = Nat.is_le(a2, b2)
134      +l3 = Nat.is_le(a3, b3)
135      +l4 = Nat.is_le(a4, b4)
136      +r1 = and5_r(l0, l1, l2, l3, l4, h)
137      +r2 = MBool.eq_true_of_and_right(l1, Bool.and(l2, Bool.and(l3, l4)), r1)
138      +r3 = MBool.eq_true_of_and_right(l2, Bool.and(l3, l4), r2)
139      +x1 = Nat.mul(a1, v1)
140      +x2 = Nat.mul(a2, v2)
141      +x3 = Nat.mul(a3, v3)
142      +x4 = Nat.mul(a4, v4)
143      +y1 = Nat.mul(b1, v1)
144      +y2 = Nat.mul(b2, v2)
145      +y3 = Nat.mul(b3, v3)
146      +y4 = Nat.mul(b4, v4)
147      MNat.add_le_add(a0, Nat.add(x1, Nat.add(x2, Nat.add(x3, x4))), b0, Nat.add(y1, Nat.add(y2, Nat.add(y3, y4))), and5_1(l0, l1, l2, l3, l4, h), MNat.add_le_add(x1, Nat.add(x2, Nat.add(x3, x4)), y1, Nat.add(y2, Nat.add(y3, y4)), MNat.mul_le_mul_right(a1, b1, v1, MBool.eq_true_of_and_left(l1, Bool.and(l2, Bool.and(l3, l4)), r1)), MNat.add_le_add(x2, Nat.add(x3, x4), y2, Nat.add(y3, y4), MNat.mul_le_mul_right(a2, b2, v2, MBool.eq_true_of_and_left(l2, Bool.and(l3, l4), r2)), MNat.add_le_add(x3, x4, y3, y4, MNat.mul_le_mul_right(a3, b3, v3, MBool.eq_true_of_and_left(l3, l4, r3)), MNat.mul_le_mul_right(a4, b4, v4, MBool.eq_true_of_and_right(l3, l4, r3))))))

Uses (16)

Used by (1)