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)))

Uses (10)

Used by (1)