diff --git a/pvs-core.lp b/pvs-core.lp new file mode 100644 index 0000000000000000000000000000000000000000..fda76e5304040c3a50859fb2c3ed6d7cbf3909a2 --- /dev/null +++ b/pvs-core.lp @@ -0,0 +1,34 @@ +symbol const Type : TYPE +symbol const Prop : Type + +symbol injective eta : Type ⇒ TYPE +symbol injective eps : eta Prop ⇒ TYPE + +symbol arr : Type ⇒ Type ⇒ Type +set infix right 6 "~>" ≔ arr + +rule eta (&A ~> &B) → eta &A ⇒ eta &B + +symbol imp : eta (Prop ~> Prop ~> Prop) +set infix right 6 "I>" ≔ imp + +symbol impIntro : ∀ (p q : eta Prop), (eps p ⇒ eps q) ⇒ eps (p I> q) +symbol impElim : ∀ p q : eta Prop, eps (p I> q) ⇒ eps p ⇒ eps q + +symbol all : ∀ A : Type, eta (A ~> Prop) ⇒ eta Prop +rule eta (all &A &P) → ∀ x : eta &A, eta (&P x) + +symbol allIntro : ∀ A : Type, ∀ p : eta (A ~> Prop), ∀ x : eta A, eps (p x) + ⇒ + eps (all A p) +symbol allElim : ∀ A : Type, ∀ t : eta A, ∀ p : eta (A ~> Prop), eps (all A p) + ⇒ + eps (p t) + +symbol psub : ∀ A : Type, eta (A ~> Prop) ⇒ Type + +symbol const cast : Type ⇒ Type +rule eta (cast (psub &A _)) → eta &A + +symbol psubElim : ∀ A : Type, ∀ p : eta (A ~> Prop), +∀ t : eta (cast (psub A p)), eps (p t)