Newer
Older
require open encodings.cert_f adlib.cert_f.booleans
prelude.cert_f.logic
constant symbol rat : Univ Type
constant symbol zero : Term rat
let bv ≔ fst N.not_zero &b in
let dv ≔ fst N.not_zero &d in
rule rateq (&a / &b) (&c / &d) →
let nzval x ≔ fst N.not_zero x in
eq (N.times &a (nzval &d)) (N.times (nzval &b) &c)
definition onz : Term N.nznat ≔ N.nznatc 1 N.one_not_zero
// theorem one_neutral (a: Term N.nat) (b: Term N.nznat):
// Term (rateq (times (a / b) (1 / onz)) (1 / onz))
type Term (N.nznat ⊑ N.nat)
type λ(b: Term N.nznat) (pr: Term (N.nznat ⊑ N.nat)),
@↑ N.nznat N.nat pr b
// FIXME explicitness required
theorem right_cancellation (a: Term N.nat) (b: Term N.nznat)
(pr: Term (N.nznat ⊑ N.nat)):
Term (rateq (times (a / b) ((@↑ N.nznat N.nat pr b) / onz)) (a / onz))
proof
qed
// Should generate a TCC to provide [pr]