diff --git a/prelude/numbers.lp b/prelude/numbers.lp index 9f47ebe9a7c1df74c739e39707c0777e29a6b01f..1978de675e97eb98915936edf596019234b6fe64 100644 --- a/prelude/numbers.lp +++ b/prelude/numbers.lp @@ -3,11 +3,14 @@ require open personoj.encodings.pvs_cert require open personoj.encodings.bool_hol require open personoj.encodings.prenex require open personoj.prelude.logic +require open personoj.encodings.builtins +require open personoj.encodings.subtype2 // // Theory numbers // constant symbol number: θ {|set|} +rule η (μ number) ↪ η number // // Theory number_fields @@ -17,6 +20,8 @@ definition number_field ≔ psub field_pred // number_field is an uninterpreted subtype definition numfield ≔ number_field +symbol insertnum: η {|!Number!|} → η numfield + symbol {|+|}: η (numfield ~> numfield ~> numfield) set infix left 6 "+" ≔ {|+|} symbol {|-|}: η (numfield ~> numfield ~> numfield) @@ -43,17 +48,17 @@ symbol associative_add // constant symbol real_pred: η (pred numfield) definition real ≔ psub real_pred -// theorem real_not_empty: Term (∃ real_pred) -// proof admit -// constant symbol zero : Term real -// // Built in the PVS typechecker +set debug +u +set flag "print_implicits" on +symbol Num_real: ε (∀ (λx: η {|!Number!|}, real_pred (insertnum x))) -// definition nonzero_real_pred ≔ neq zero -// definition nonzero_real ≔ Psub nonzero_real_pred -// theorem nonzero_real_not_empty: Term (∃ nonzero_real_pred) -// proof admit -// definition nzreal ≔ nonzero_real +// Built in the PVS typechecker + +definition nonzero_real ≔ + psub {real} + (λx: η real, + neq _ x (cast {_} {real} (λx, x) (insertnum 0) _)) // symbol closed_plus_real: Π(x y: Term real), // let pr ≔ S.restr numfield real_pred in