def key_trans
bend-kit-scheduler@0.4.1.0 · queue_proof.bend:68
import bend-kit-scheduler@0.4.1.0/queue_proof.bend as QueueProof
import Base
import bend-mathlib@0.7.4.0/nat.bend as MNat
import bend-mathlib@0.7.4.0/bool.bend as MBool
import bend-kit-scheduler@0.4.1.0/queue.bend as Q
68def key_trans(+d: Nat, +e: Nat, +f: Nat, +i: Nat, +j: Nat, +k: Nat, p: {Q.le.same(Nat.is_eq(d, e), i, j, d, e) == True{} : Bool}, q: {Q.le.same(Nat.is_eq(e, f), j, k, e, f) == True{} : Bool}) -> {Q.le.same(Nat.is_eq(d, f), i, k, d, f) == True{} : Bool}:
69 match d e f:
70 case 0n 0n 0n:
71 MNat.le_trans(i, j, k, p, q)
72 case 0n 0n 1n+r:
73 {==}
74 case 0n 1n+s 0n:
75 Empty.absurd({Nat.is_le(i, k) == True{} : Bool}, MBool.false_ne_true()(q))
76 case 0n 1n+s 1n+r:
77 {==}
78 case 1n+r 0n 0n:
79 Empty.absurd({False{} == True{} : Bool}, MBool.false_ne_true()(p))
80 case 1n+r 0n 1n+t:
81 Empty.absurd({Q.le.same(Nat.is_eq(1n+r, 1n+t), i, k, 1n+r, 1n+t) == True{} : Bool}, MBool.false_ne_true()(p))
82 case 1n+r 1n+s 0n:
83 Empty.absurd({False{} == True{} : Bool}, MBool.false_ne_true()(q))
84 case 1n+r 1n+s 1n+t:
85 key_succ.conclusion(r, t, i, k, key_trans(r, s, t, i, j, k, key_succ.premise(r, s, i, j, True{}, p), key_succ.premise(s, t, j, k, True{}, q)))