diff --git a/encodings/cf.lp b/encodings/cf.lp index 209cb854b347fb789fedf7b28351c035bb2e2c57..1770eea0651bc17910188e36e660d0c6ff56e7da 100644 --- a/encodings/cf.lp +++ b/encodings/cf.lp @@ -1,6 +1,6 @@ // PVS cert with functional PTS -symbol Sort : TYPE -symbol Univ : Sort ⇒ TYPE +constant symbol Sort : TYPE +constant symbol Univ : Sort ⇒ TYPE constant symbol Kind : Sort constant symbol Type : Sort @@ -8,9 +8,9 @@ constant symbol Prop : Sort // Axioms: (Prop, Type), (Type, Kind) // Prop: Type -symbol uProp : Univ Type +constant symbol uProp : Univ Type // Type: Kind -symbol uType : Univ Kind +constant symbol uType : Univ Kind // Encoding of rules // (Prop, Prop, Prop), (Type, Type, Type), (Type, Prop, Prop) @@ -22,34 +22,33 @@ rule Rule Prop Prop → Prop and Rule Type Prop → Prop // [Term s t] decodes term [t] of encoded sort [s] -symbol Term {s : Sort} : Univ s ⇒ TYPE +injective symbol Term {s : Sort} : Univ s ⇒ TYPE rule Term uProp → Univ Prop and Term uType → Univ Type // [prod s1 s2 A B] encodes [Πx : (A: s1). (B x: s2)] symbol prod {s1 s2 : Sort} (A : Univ s1) : - (@Term s1 A ⇒ Univ s2) ⇒ Univ (Rule s1 s2) + (Term A ⇒ Univ s2) ⇒ Univ (Rule s1 s2) -rule Term _ (prod &s1 &s2 &A &B) → ∀ x : Term &A, Term (&B x) +rule Term (prod &s1 &s2 &A &B) → ∀ x : Term &A, Term (&B x) // Predicate subtyping // can be seen as a dependant pair type with // - first element is a term of some type [A] and // - second is a predicate on [A] verified by the first element. -symbol psub (A : Univ Type) : (@Term Type A ⇒ Univ Prop) ⇒ Univ Type +symbol psub (A : Univ Type) : (Term A ⇒ Univ Prop) ⇒ Univ Type // Γ ⊢ M : { v : T | U } // —————————————————————PROJl // Γ ⊢ fst(M) : T -symbol fst {T : Univ Type} {U : @Term Type T ⇒ Univ Prop}: - @Term Type (psub T U) ⇒ @Term Type T +symbol fst {T : Univ Type} {U : Term T ⇒ Univ Prop}: Term (psub T U) ⇒ Term T // Γ ⊢ M : { v : T | U } // ——————————————————————————PROJr // Γ ⊢ snd(M) : U[v ≔ fst(M)] -symbol snd (T: Univ Type) (U: @Term Type T ⇒ Univ Prop) - (M: @Term Type (psub T U)): @Term Prop (U (@fst T U M)) +symbol snd (T: Univ Type) (U: Term T ⇒ Univ Prop) (M: Term (psub T U)): + Term (U (@fst T U M)) // An inhabitant of a predicate subtype, that is, a pair of // an element and the proof that it satisfies the predicate @@ -57,7 +56,7 @@ symbol snd (T: Univ Type) (U: @Term Type T ⇒ Univ Prop) // ——————————————————————————————————————————————————PAIR // Γ ⊢ ⟨M, N⟩ : {v : T | U} symbol pair {T: Univ Type} (U: @Term Type T ⇒ Univ Prop) (M: @Term Type T): - @Term Prop (U M) ⇒ @Term Type (psub T U) + Term (U M) ⇒ Term (psub T U) rule @fst &T &U (@pair &T &U &M _) → &M rule @snd &T &U (@pair &T &U _ &P) → &P diff --git a/prelude/cf/booleans.lp b/prelude/cf/booleans.lp index 9babe9e7c7b20299620a85c0397abf1962b3e23d..e0e80b63d6deac733fe015426f353e632f330ce8 100644 --- a/prelude/cf/booleans.lp +++ b/prelude/cf/booleans.lp @@ -2,6 +2,6 @@ require open encodings.cf definition bool ≔ Prop definition false ≔ @prod Type Prop uProp (λ x : @Term Type uProp, x) -definition true ≔ @Term Prop false ⇒ @Term Prop false +definition true ≔ Term false ⇒ Term false -definition bnot (P: @Term Type uProp) ≔ @prod Prop Prop P (λ x, false) +definition bnot (P: Term uProp) ≔ @prod Prop Prop P (λ x, false) diff --git a/prelude/cf/equalities.lp b/prelude/cf/equalities.lp index a2941313187c28400a3458905e253075fe4a24bb..8d0f8f28087929b45e07e5b1d91f32db320468f1 100644 --- a/prelude/cf/equalities.lp +++ b/prelude/cf/equalities.lp @@ -1,3 +1,3 @@ require open encodings.cf prelude.cf.booleans -symbol eq {T: @Term Kind uType}: @Term Type T ⇒ @Term Type T ⇒ @Term Type uProp +symbol eq {T: Term uType}: Term T ⇒ Term T ⇒ Term uProp diff --git a/prelude/cf/naturalnumbers.lp b/prelude/cf/naturalnumbers.lp index fc46bfb549410383c9766b9596ca134d8bd4bb2e..41e63179ce3b5bada5707ea3839d95f5e467b75f 100644 --- a/prelude/cf/naturalnumbers.lp +++ b/prelude/cf/naturalnumbers.lp @@ -1,8 +1,8 @@ require open encodings.cf prelude.cf.booleans -constant symbol nat : @Term Kind uType -constant symbol zero : @Term Type nat -symbol succ : @Term Type nat ⇒ @Term Type nat +constant symbol nat : Term uType +constant symbol zero : Term nat +injective symbol succ : Term nat ⇒ Term nat set builtin "0" ≔ zero set builtin "+1" ≔ succ diff --git a/prelude/cf/notequal.lp b/prelude/cf/notequal.lp index 400bc76222f4efa3f7775ce233899f1411b5faf0..f2a759cdcf50c445b45d9763eccffa1adb72d9c5 100644 --- a/prelude/cf/notequal.lp +++ b/prelude/cf/notequal.lp @@ -1,3 +1,3 @@ require open encodings.cf prelude.cf.booleans prelude.cf.equalities -definition neq {T: @Term Kind uType} (x y: @Term Type T) ≔ bnot (@eq T x y) +definition neq {T: Term uType} (x y: Term T) ≔ bnot (eq x y)