From 104d5302bfb398c938b2bdd581e0f3b4ad7a1ad5 Mon Sep 17 00:00:00 2001 From: gabrielhdt <gabrielhondet@gmail.com> Date: Wed, 11 Mar 2020 08:29:49 +0100 Subject: [PATCH] fixed implicit args of prod --- adlib/cert_f/booleans.lp | 14 ++++++-------- encodings/cert_f.lp | 7 ++++--- prelude/cert_f/logic.lp | 13 ++++--------- prelude/cert_f/numbers.lp | 4 +++- 4 files changed, 17 insertions(+), 21 deletions(-) diff --git a/adlib/cert_f/booleans.lp b/adlib/cert_f/booleans.lp index ebd2b6e..300f438 100644 --- a/adlib/cert_f/booleans.lp +++ b/adlib/cert_f/booleans.lp @@ -1,14 +1,13 @@ require open encodings.cert_f definition bool ≔ uProp -definition false: Term bool ≔ @prod Type Prop uProp (λ x, x) -definition true: Term bool ≔ @prod Prop Prop false (λ _, false) +definition false ≔ @prod Type Prop bool (λ x, x) +definition true ≔ @prod Prop Prop false (λ _, false) -definition imp (P Q: Term uProp): Term bool ≔ @prod Prop Prop P (λ_, Q) -definition forall {eT: Term uType} (P: Term eT ⇒ Term bool): Term bool ≔ - @prod _ _ eT P +definition imp (P Q: Term uProp) ≔ @prod Prop Prop P (λ_, Q) +definition forall {T: Term uType} (P: Term T ⇒ Term bool) ≔ @prod _ _ T P -definition bnot (P: Term uProp): Term bool ≔ @prod Prop Prop P (λ _, false) +definition bnot (P: Term uProp) ≔ @prod Prop Prop P (λ _, false) set prefix 5 "¬" ≔ bnot definition band (P Q: Term uProp) ≔ bnot (imp P (bnot Q)) @@ -20,11 +19,10 @@ definition biff (P Q: Term bool) ≔ (imp P Q) ∧ (imp Q P) set infix 7 "⇔" ≔ biff definition when (P Q: Term uProp) ≔ imp Q P -// FIXME explicitness? set builtin "bot" ≔ false set builtin "top" ≔ true set builtin "imp" ≔ imp set builtin "and" ≔ band -set builtin "or" ≔ bor +set builtin "or" ≔ bor set builtin "not" ≔ bnot diff --git a/encodings/cert_f.lp b/encodings/cert_f.lp index f19cf8c..6a8b83c 100644 --- a/encodings/cert_f.lp +++ b/encodings/cert_f.lp @@ -28,9 +28,10 @@ rule Term uProp → Univ Prop and Term uType → Univ Type // [prod s1 s2 A B] encodes [Πx : (A: s1). (B: s2)] -symbol prod {sA sB: Sort} (A: Univ sA): (Term A ⇒ Univ sB) ⇒ Univ (Rule sA sB) +symbol prod {sA: Sort} {sB: Sort} (A: Univ sA): + (Term A ⇒ Univ sB) ⇒ Univ (Rule sA sB) -rule Term (@prod &sA &sB &A &B) → ∀ x : Term {&sA} &A, Term {&sB} (&B x) +rule Term (prod {&sA} {&sB} &A &B) → ∀ x : Term {&sA} &A, Term {&sB} (&B x) // Predicate subtyping // can be seen as a dependant pair type with @@ -46,7 +47,7 @@ symbol fst {T: Univ Type} (P: Term T ⇒ Univ Prop): Term (Psub T P) ⇒ Term T // Γ ⊢ M : { v : T | P } // ——————————————————————————PROJr // Γ ⊢ snd(M) : P[v ≔ fst(M)] -constant symbol snd {T: Univ Type} (P: Term T ⇒ Univ Prop) +constant symbol snd {T: Univ Type} {P: Term T ⇒ Univ Prop} (M: Term (Psub T P)): Term (P (fst P M)) diff --git a/prelude/cert_f/logic.lp b/prelude/cert_f/logic.lp index 68b68ee..7a89656 100644 --- a/prelude/cert_f/logic.lp +++ b/prelude/cert_f/logic.lp @@ -12,10 +12,11 @@ require adlib.cert_f.subtype as S // symbol eq {T: Term uType}: Term T ⇒ Term T ⇒ Term uProp set infix 5 "=" ≔ eq +// set builtin "eq" ≔ eq // NOTE not in the prelude -constant symbol cast_trans (A B C: Term uType) (prab: Term (A ⊑ B)) (prbc: Term (B ⊑ C)) - (x: Term A): +constant symbol cast_trans (A B C: Term uType) (prab: Term (A ⊑ B)) + (prbc: Term (B ⊑ C)) (x: Term A): Term (eq (↑ {B} C prbc (↑ {A} B prab x)) (↑ {A} C (S.trans A B C prab prbc) x)) @@ -80,7 +81,7 @@ definition ∃ {eT: Term uType} (P: Term eT ⇒ Term bool) ≔ // // Defined types // -definition pred (eT: Univ Type) ≔ @prod Type Type eT (λ_, bool) +definition pred (eT: Univ Type) ≔ prod eT (λ_, bool) definition PRED ≔ pred definition predicate ≔ pred definition PREDICATE ≔ pred @@ -114,12 +115,6 @@ proof qed symbol reflexivity_of_equal T (x: Term T) : Term (eq x x) - -// FIXME: carrying builtins over import? -set builtin "T" ≔ T -set builtin "P" ≔ P -// FIXME: could builtins be more flexible? -// set builtin "eq" ≔ eq // set builtin "refl" ≔ reflexivity_of_equal symbol transitivity_of_equal T (x y z: Term T) : diff --git a/prelude/cert_f/numbers.lp b/prelude/cert_f/numbers.lp index f6e9a2f..66e9ed0 100644 --- a/prelude/cert_f/numbers.lp +++ b/prelude/cert_f/numbers.lp @@ -47,7 +47,9 @@ definition nzreal ≔ nonzero_real symbol closed_plus_real: ∀(x y: Term real), let pr ≔ S.restr numfield real_pred in - Term (real_pred ((↑ numfield pr x) + (↑ numfield pr y))) + let xnf ≔ ↑ numfield pr x in + let ynf ≔ ↑ numfield pr y in + Term (real_pred (xnf + ynf)) symbol lt (x y: Term real): Term bool -- GitLab