diff --git a/GNUmakefile b/GNUmakefile index ab954304ca041e60562bc3ed5a90f29cceeca7cd..d98fb013ff0417f3c6b19f6739c9577d4b2e3b92 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,7 +1,24 @@ -LP = lambdapi +LP_SRC = $(shell find . -type f -name "*.lp") +LP_OBJ = $(LP_SRC:%.lp=%.lpo) + +all: $(LP_OBJ) + +$(LP_OBJ)&: $(LP_SRC) + lambdapi check --gen-obj $^ + +install: $(LP_OBJ) lambdapi.pkg + lambdapi install lambdapi.pkg $(LP_OBJ) $(LP_SRC) + +.PHONY: uninstall +uninstall: + lambdapi uninstall lambdapi.pkg + +.PHONY: clean +clean: + $(RM) -r $(LP_OBJ) tests: @echo "Checking [core] prelude" - $(LP) prelude/core/*.lp + lambdapi prelude/core/*.lp @echo "Checking [cert] prelude" - $(LP) prelude/cert_f/*.lp + lambdapi prelude/cert_f/*.lp diff --git a/encodings/useless/pvs_core.lp b/encodings/pvs_core.lp similarity index 100% rename from encodings/useless/pvs_core.lp rename to encodings/pvs_core.lp diff --git a/encodings/useless/cert_f.lp b/encodings/useless/cert_f.lp deleted file mode 100644 index 9d9bfa9a0681e9e1dec8628a5a9a4700859b27ae..0000000000000000000000000000000000000000 --- a/encodings/useless/cert_f.lp +++ /dev/null @@ -1,100 +0,0 @@ -// PVS cert with functional PTS -constant symbol Sort : TYPE -constant symbol Univ : Sort → TYPE - -constant symbol Kind : Sort -constant symbol Type : Sort -constant symbol Prop : Sort - -// Axioms: (Prop, Type), (Type, Kind) -// Prop: Type -constant symbol uProp : Univ Type -// Type: Kind -constant symbol uType : Univ Kind - -// Encoding of rules -// (Prop, Prop, Prop), (Type, Type, Type), (Type, Prop, Prop) -// Since the PTS is functional, [Rule s1 s2] rewrites the the 3rd element -// of the rule. -symbol Rule : Sort → Sort → Sort -rule Rule Prop Prop ↪ Prop -with Rule Type Type ↪ Type -with Rule Type Prop ↪ Prop - -// [Term s t] decodes term [t] of encoded sort [s] -injective symbol Term {s: Sort}: Univ s → TYPE -rule Term uProp ↪ Univ Prop -with Term uType ↪ Univ Type - -// [prod s1 s2 A B] encodes [Πx : (A: s1). (B: s2)] -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) - -// 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. -constant symbol Psub {T: Term uType}: (Term T → Term uProp) → Term uType - -// Γ ⊢ M : { v : T | P } -// —————————————————————PROJl -// Γ ⊢ fst(M) : T -symbol fst {T: Univ Type} {P: Term T → Univ Prop}: Term (Psub 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} - (M: Term (Psub P)): - Term (P (fst M)) - -// An inhabitant of a predicate subtype, that is, a pair of -// an element and the proof that it satisfies the predicate -// Γ ⊢ M : T Γ ⊢ N : P[v ≔ M] Γ ⊢ { v : T | P } -// ——————————————————————————————————————————————————PAIR -// Γ ⊢ ⟨M, N⟩ : {v : T | P} -symbol pair {T: Univ Type} (P: Term T → Univ Prop) (M: Term T): - Term (P M) → Term (Psub P) - -// opair is a pair forgetting its snd argument -protected symbol opair (T: Univ Type) (P: Term T → Univ Prop) (M: Term T): - Term (Psub P) - -// Two pairs are convertible if their first element is -rule pair {$T} $P $M _ ↪ opair $T $P $M - -rule fst (opair _ _ $M) ↪ $M -// and opair _ $P (fst {_} {$P} $X) ↪ $X // Surjective pairing -//NOTE: can we remove non linearity? - -// The subtype relation -symbol subtype: Term uType → Term uType → Term uProp -set infix left 6 "⊑" ≔ subtype - -// [↑ {T} U p t] casts element [t] from type [T] to type [U] given -// the proof [p] that [T] is a subtype of [U] -set declared "↑" -symbol ↑ {T: Term uType} (U: Term uType): Term (T ⊑ U) → Term T → Term U -rule ↑ {$T} $T _ $x ↪ $x // Identity cast -// NOTE: a cast from a type [{x: A | P}] to type [A] is a [fst], -with ↑ {Psub {$T} $P} $T _ ↪ fst {$T} {$P} -// and a "downcast" is the pair constructor -set declared "↓" - -// Auxiliary definitions - -// [↓ {T} P t π] down casts term [t] to type [{x: T | P(x)}] given the -// proof [π] that [t] verifies predicate [P]. -definition ↓ {T} ≔ pair {T} -// NOTE: we can only down-cast from a type to its direct sub-type - -definition arrow {sA} {sB} (A: Univ sA) (B: Univ sB) ≔ prod A (λ_, B) -set infix left 5 "~>" ≔ arrow -// Builtins -definition T ≔ Term {Type} -set builtin "T" ≔ T - -definition P ≔ Term {Prop} -set builtin "P" ≔ P diff --git a/encodings/useless/deferred.lp b/encodings/useless/deferred.lp deleted file mode 100644 index e389f342ed8a22405087804bb50a97ed8935fe0d..0000000000000000000000000000000000000000 --- a/encodings/useless/deferred.lp +++ /dev/null @@ -1,22 +0,0 @@ -// Deep encoding of terms carrying their types. -require open personoj.encodings.lhol -require open personoj.encodings.pvs_cert -require open personoj.encodings.bool_hol - -/// Type carried with the encoded terms -constant symbol t: Set → TYPE -constant symbol quote {T: Set}: η T → t T -injective symbol unquote {T: Set}: t T → η T -rule unquote (quote $t) ↪ $t - -// Coding of applied types -constant symbol APP: Set → ΠU: Set, t U → Set -rule η (APP (arrd {$T} $bU) $T $y) ↪ η ($bU (unquote $y)) - -// Quoted terms application -constant symbol app {T: Set} {S: Set}: t T → Πy: t S, t (APP T S y) -rule unquote (app {arrd {$a} _} {$a} $t $u) ↪ (unquote $t) (unquote $u) - -constant symbol p: Bool → TYPE -constant symbol quote_p {P: Bool}: ε P → p P -symbol unquote_p {P: Bool}: p P → ε P diff --git a/encodings/useless/deferred_erasure.lp b/encodings/useless/deferred_erasure.lp deleted file mode 100644 index c29fb9fb6a07ea7f07af7f8116976752f359860f..0000000000000000000000000000000000000000 --- a/encodings/useless/deferred_erasure.lp +++ /dev/null @@ -1,25 +0,0 @@ -// Deep encoding using type erasure. Deferred terms do not carry their type, but -// the unquoting function takes a type as argument and unquotes the term -// according to this type. -require open personoj.encodings.lhol -require open personoj.encodings.pvs_cert -require open personoj.encodings.bool_hol - -constant symbol t: TYPE -constant symbol quote {T: Set}: η T → t -injective symbol app: t → t → t -constant symbol abs: (t → t) → t - -rule app (abs $b) $a ↪ $b $a - -symbol unquote (T: Set): t → η T -symbol quote_B {P: Bool}: ε P → t -symbol unquote_B (P: Bool): t → ε P - -rule unquote (arrd $b) $f $x ↪ unquote ($b $x) (app $f (quote $x)) -with unquote_B (impd $b) $h $x ↪ unquote_B ($b $x) (app $h (quote_B $x)) -with unquote_B (forall $b) $f $x ↪ unquote_B ($b $x) (app $f (quote $x)) - -symbol if (T: Set): Bool → t → t → η T -rule if $T true $then _ ↪ unquote $T $then -with if $T false _ $else ↪ unquote $T $else diff --git a/sandbox/boolops_if.lp b/sandbox/boolops_if.lp deleted file mode 100644 index 987a03069647938d9d4b512e21f604414435e499..0000000000000000000000000000000000000000 --- a/sandbox/boolops_if.lp +++ /dev/null @@ -1,9 +0,0 @@ -require open personoj.encodings.lhol -require open personoj.encodings.pvs_cert -require open personoj.encodings.boolops_if - -theorem trivial (P: η bool): ε (P ⊃ (λ_, P)) -proof - assume P - refine λ_ _ f, f -qed diff --git a/sandbox/quote.lp b/sandbox/quote.lp deleted file mode 100644 index afcfb532c8abdd8dcf672494095f4beb8d6341b2..0000000000000000000000000000000000000000 --- a/sandbox/quote.lp +++ /dev/null @@ -1,30 +0,0 @@ -require open - personoj.encodings.lhol - personoj.encodings.pvs_cert - personoj.encodings.if - personoj.encodings.booleans -require personoj.encodings.deferred as Deferred -require open personoj.encodings.subtype - -constant symbol T: Set -symbol t: η T -symbol f: η (T ~> T) -constant symbol S: Set -symbol s: η S - -set flag "print_implicits" on -definition qu_ko ≔ Deferred.app (Deferred.quote f) (Deferred.quote s) -compute Deferred.unquote qu_ko - -definition qu_ok ≔ Deferred.app (Deferred.quote f) (Deferred.quote t) -compute Deferred.unquote qu_ok - -compute Deferred.quote {T ~> T} (λx:η T, f x) - -symbol lor: Deferred.t bool → Deferred.t bool → Bool - -compute let f' ≔ Deferred.quote f in - let t' ≔ Deferred.quote t in - let s' ≔ Deferred.quote s in - let refl_t' ≔ Deferred.quote_p (S_Refl T) in - lif T refl_t' refl_t' true (Deferred.app f' t') (Deferred.app f' s')