def wv.q_two

bend-osdev-word64@0.1.1.0 · proof_value.bend:377

import bend-osdev-word64@0.1.1.0/proof_value.bend as ProofValue
import Base
import bend-osdev-u32@0.1.0.0/LAWS.bend as UL
import bend-osdev-u32@0.1.0.0/LAWS_order.bend as UO

377def wv.q_two(+n: Nat, +y: Nat, +s: Nat, +a: Nat, +b: Nat, ha: {Nat.is_lt(a, wv.Q(n, 1n)) == True{} : Bool}, hb: {Nat.is_lt(b, wv.Q(n, 1n)) == True{} : Bool}) -> {Nat.is_lt(Nat.add(a, b), Nat.add(s, wv.Q(n, 2n+y))) == True{} : Bool}:
378  +q1 = wv.Q(n, 1n)
379  +e2 = Equal.trans(Nat, wv.Q(n, 2n+y), Nat.add(q1, wv.Q(n, 1n+y)), Nat.add(q1, Nat.add(q1, wv.Q(n, y))), wv.qs(n, 1n+y), Equal.cong(Nat, Nat, v => Nat.add(q1, v), wv.Q(n, 1n+y), Nat.add(q1, wv.Q(n, y)), wv.qs(n, y)))
380  +s1 = wn.add_lt_mono(a, q1, b, q1, ha, hb)
381  +s2 = Equal.trans(Bool, Nat.is_le(Nat.add(q1, q1), Nat.add(q1, Nat.add(q1, wv.Q(n, y)))), Nat.is_le(q1, Nat.add(q1, wv.Q(n, y))), True{}, wn.le_add_l(q1, q1, Nat.add(q1, wv.Q(n, y))), UO.nat_le_add_r(q1, wv.Q(n, y)))
382  +s4 = UO.nat_le_trans(Nat.add(q1, q1), Nat.add(q1, Nat.add(q1, wv.Q(n, y))), Nat.add(s, wv.Q(n, 2n+y)), s2, UO.nat_le_trans(Nat.add(q1, Nat.add(q1, wv.Q(n, y))), wv.Q(n, 2n+y), Nat.add(s, wv.Q(n, 2n+y)), wn.le_rw2(Nat.add(q1, Nat.add(q1, wv.Q(n, y))), Nat.add(q1, Nat.add(q1, wv.Q(n, y))), wv.Q(n, 2n+y), Equal.sym(Nat, wv.Q(n, 2n+y), Nat.add(q1, Nat.add(q1, wv.Q(n, y))), e2), UL.nat_le_refl(Nat.add(q1, Nat.add(q1, wv.Q(n, y))))), UL.nat_le_add(wv.Q(n, 2n+y), s)))
383  UO.nat_lt_le_trans(Nat.add(a, b), Nat.add(q1, q1), Nat.add(s, wv.Q(n, 2n+y)), s1, s4)

Uses (18)

Used by (2)