diff --git a/encodings/equality.lp b/encodings/equality.lp index 2450de20250411e11552e74c434c1aad1615c6bd..961a81b001b0d791982509a1e798dfa7bc64ef20 100644 --- a/encodings/equality.lp +++ b/encodings/equality.lp @@ -1,7 +1,5 @@ require open personoj.encodings.lhol -symbol equal {T: Set}: η T ⇒ η T ⇒ Bool -set infix left 6 "=" ≔ equal -set builtin "T" ≔ η -set builtin "P" ≔ ε -set builtin "eq" ≔ equal +symbol eq {T: Set}: η T ⇒ η T ⇒ Bool +set infix left 6 "=" ≔ eq +set builtin "eq" ≔ eq diff --git a/encodings/if.lp b/encodings/if.lp new file mode 100644 index 0000000000000000000000000000000000000000..f625e1f6a37e1cc1f88b728234b8eda50908418b --- /dev/null +++ b/encodings/if.lp @@ -0,0 +1,6 @@ +require open personoj.encodings.lhol + personoj.encodings.pvs_cert + personoj.encodings.subtype + +symbol if {U: Set} {V: Set} (S: Set) +: ε (U ⊑ S) ⇒ ε (V ⊑ S) ⇒ Bool ⇒ η U ⇒ η V ⇒ η S diff --git a/encodings/lazy.lp b/encodings/lazy.lp index 66de71b75ff495a4308a570c6c2c6bcbc8d12502..067cbfa3598f8a304a3b7c0e6811c78cd39fc63e 100644 --- a/encodings/lazy.lp +++ b/encodings/lazy.lp @@ -2,9 +2,6 @@ require open personoj.encodings.lhol personoj.encodings.pvs_cert -symbol or: Bool ⇒ Bool ⇒ Bool -symbol {|and|}: Bool ⇒ Bool ⇒ Bool - definition false ≔ forall {bool} (λx, x) definition true ≔ impd {false} (λ_, false) @@ -30,7 +27,7 @@ set builtin "and" ≔ band set builtin "or" ≔ bor // Lazy reduction rules -rule or true → λ_, true -rule or false → λx, x -rule {|and|} true → λx, x -rule {|and|} false → λ_, false +//rule bor true → λ_, true +//rule bor false → λx, x +//rule band true → λx, x +//rule band false → λ_, false diff --git a/encodings/prenex.lp b/encodings/prenex.lp index c92c1bb4f000bd6c329633dd14340ef38c74dc91..cc544237ddffdce0f6c1c162c50392adad9b2eed 100644 --- a/encodings/prenex.lp +++ b/encodings/prenex.lp @@ -7,5 +7,8 @@ symbol χ: Scheme ⇒ TYPE symbol ∇: Set ⇒ Scheme rule χ (∇ &X) → η &X -symbol forall_pt: (Set ⇒ Scheme) ⇒ Scheme -rule χ (forall_pt &p) → ∀T: Set, χ (&p T) +symbol forallp_scheme: (Set ⇒ Scheme) ⇒ Scheme +rule χ (forallp_scheme &p) → ∀T: Set, χ (&p T) + +symbol forallp_bool: (Set ⇒ Bool) ⇒ Bool +rule ε (forallp_bool &P) → ∀x: Set, ε (&P x) diff --git a/prelude/logic2.lp b/prelude/logic2.lp new file mode 100644 index 0000000000000000000000000000000000000000..d0a1d7e33564512945171dc820939b3b3f3b35c4 --- /dev/null +++ b/prelude/logic2.lp @@ -0,0 +1,97 @@ +require open + personoj.encodings.lhol + personoj.encodings.pvs_cert + personoj.encodings.equality + personoj.encodings.prenex + personoj.encodings.if + personoj.encodings.lazy + personoj.encodings.subtype + +definition neq {T: Set} (x y: η T) ≔ bnot (eq x y) +set infix left 6 "/=" ≔ neq +set infix left 6 "≠" ≔ neq + + +// +// boolean_props +// +constant symbol bool_exclusive: ε (neq {bool} false true) +constant symbol bool_inclusive +: ε (forall {bool} (λx, ((eq {bool} x false) ∨ (eq {bool} x true)))) + +compute ε (forall {bool} (λx, ((eq {bool} x false) ∨ (eq {bool} x true)))) + +theorem excluded_middle: ε (forall {bool} (λx, x ∨ ¬ x)) +proof +admit + +// +// xor_def +// +definition xor (a b: η bool) ≔ neq {bool} a b +theorem xor_def +: ε (forall {bool} + (λa, + (forall {bool} (λb, eq {bool} + (xor a b) + (if {bool} {bool} bool + (Refl bool) (Refl bool) + a (bnot b) b))))) +proof + simpl +admit + +// +// Quantifier props +// +set declared "∃" +// Declared as a lemma in the prelude +definition ∃ {T: Set} (P: η T ⇒ η bool) ≔ ¬ (forall (λx, ¬ (P x))) + +// +// Defined types +// +definition pred (T: Set) ≔ arrd {T} (λ_, bool) +definition PRED ≔ pred +definition predicate ≔ pred +definition PREDICATE ≔ pred +definition setof ≔ pred +definition SETOF ≔ pred + +symbol reflexivity_of_equal: ε (forallp_bool (λT, forall {T} (λx, eq x x))) +set builtin "refl" ≔ reflexivity_of_equal + +symbol transitivity_of_equal +: ε (forallp_bool + (λT, forall + {T} (λx, forall + {T} (λy, forall + {T} (λz, (imp ((x = y) ∧ (y = z)) (x = z))))))) + +symbol symmetry_of_equal +: ε (forallp_bool + (λT, forall + {T} (λx, forall + {T} (λy, (imp (x = y) (y = x)))))) + +// +// if_props +// +theorem lift_if1 +: ε (forallp_bool + (λs, + (forallp_bool + (λt, + (forall + {bool} (λa, + forall + {s} (λx, + forall + {s} (λy, + forall + {s ~> t} + (λf, eq + (f (if s (Refl s) (Refl s) a x y)) + (if t (Refl t) (Refl t) a (f x) (f y))))))))))) +proof +admit