packages feed

rzk-0.9.0: test/typecheck/cases/happy-modal-inv.rzk

#lang rzk-1

#compute-nf inv_op (0_2 === 0_2)

-- inv flips endpoint: inv_op(i === 0) = mod _op (flip(i) === 1)
#def test-lt-mod-inv
  ( i : 2)
  : let mod _op q := invᵒᵖ (i ≡ 0₂) in let mod _op fi := flip_op i in _op (q = (fi === 1_2))
  := mod _op refl

#def test-inv-endpoint-one
  (i : 2)
  : let mod _op q := inv_op (i === 1_2) in
    let mod _op fi := flip_op i in
    _op (q = (fi === 0_2))
  := mod _op refl

-- uninv(inv(phi)) = phi
#def test-inv-uninv-cancel
  (i : 2)
  : uninv_op (inv_op (i === 0_2)) = (i === 0_2)
  := refl

-- inv(uninv(mod _op phi)) = mod _op phi
#def test-uninv-inv-cancel
  (i : 2)
  : let mod _op fi := flip_op i in
    inv_op (uninv_op (mod _op (fi === 0_2))) = mod _op (fi === 0_2)
  := refl

-- inv distributes over conjunction
#def test-inv-distributes-and
  (i j : 2)
  : let mod _op q := inv_op ((i === 0_2) /\ (j === 1_2)) in
    let mod _op fi := flip_op i in
    let mod _op fj := flip_op j in
    _op (q = ((fi === 1_2) /\ (fj === 0_2)))
  := mod _op refl

-- inv/uninv on TOP and BOT (bug catchers: stuck without nfTope fix)

#def test-inv-top
  : let mod _op q := (inv_op TOP) in _op (q = TOP)
  := mod _op refl

#def test-inv-bot
  : let mod _op q := inv_op BOT in _op (q = BOT)
  := mod _op refl

#def test-uninv-top
  : uninv_op (mod _op TOP) = TOP
  := refl

#def test-uninv-bot
  : uninv_op (mod _op BOT) = BOT
  := refl