mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-17 08:49:31 -06:00
98 lines
2.9 KiB
Plaintext
98 lines
2.9 KiB
Plaintext
-- many-sorted predicate calculus
|
|
-- AR 1999, revised 2001
|
|
|
|
abstract Logic = {
|
|
|
|
flags startcat=Prop ; -- this is what you want to parse
|
|
|
|
cat
|
|
Prop ; -- proposition
|
|
Dom ; -- domain of quantification
|
|
Elem Dom ; -- individual element of a domain
|
|
Proof Prop ; -- proof of a proposition
|
|
Text ; -- theorem with proof etc.
|
|
|
|
fun
|
|
-- texts
|
|
Statement : Prop -> Text ;
|
|
ThmWithProof : (A : Prop) -> Proof A -> Text ;
|
|
ThmWithTrivialProof : (A : Prop) -> Proof A -> Text ;
|
|
|
|
-- logically complex propositions
|
|
Disj : (A,B : Prop) -> Prop ;
|
|
Conj : (A,B : Prop) -> Prop ;
|
|
Impl : (A,B : Prop) -> Prop ;
|
|
Abs : Prop ;
|
|
Neg : Prop -> Prop ;
|
|
|
|
Univ : (A : Dom) -> (Elem A -> Prop) -> Prop ;
|
|
Exist : (A : Dom) -> (Elem A -> Prop) -> Prop ;
|
|
|
|
-- progressive implication ŕ la type theory
|
|
ImplP : (A : Prop) -> (Proof A -> Prop) -> Prop ;
|
|
|
|
-- inference rules
|
|
data
|
|
ConjI : (A,B : Prop) -> Proof A -> Proof B -> Proof (Conj A B) ;
|
|
fun
|
|
ConjEl : (A,B : Prop) -> Proof (Conj A B) -> Proof A ;
|
|
ConjEr : (A,B : Prop) -> Proof (Conj A B) -> Proof B ;
|
|
data
|
|
DisjIl : (A,B : Prop) -> Proof A -> Proof (Disj A B) ;
|
|
DisjIr : (A,B : Prop) -> Proof B -> Proof (Disj A B) ;
|
|
fun
|
|
DisjE : (A,B,C : Prop) -> Proof (Disj A B) ->
|
|
(Proof A -> Proof C) -> (Proof B -> Proof C) -> Proof C ;
|
|
data
|
|
ImplI : (A,B : Prop) -> (Proof A -> Proof B) -> Proof (Impl A B) ;
|
|
fun
|
|
ImplE : (A,B : Prop) -> Proof (Impl A B) -> Proof A -> Proof B ;
|
|
data
|
|
NegI : (A : Prop) -> (Proof A -> Proof Abs) -> Proof (Neg A) ;
|
|
fun
|
|
NegE : (A : Prop) -> Proof (Neg A) -> Proof A -> Proof Abs ;
|
|
AbsE : (C : Prop) -> Proof Abs -> Proof C ;
|
|
data
|
|
UnivI : (A : Dom) -> (B : Elem A -> Prop) ->
|
|
((x : Elem A) -> Proof (B x)) -> Proof (Univ A B) ;
|
|
fun
|
|
UnivE : (A : Dom) -> (B : Elem A -> Prop) ->
|
|
Proof (Univ A B) -> (a : Elem A) -> Proof (B a) ;
|
|
data
|
|
ExistI : (A : Dom) -> (B : Elem A -> Prop) ->
|
|
(a : Elem A) -> Proof (B a) -> Proof (Exist A B) ;
|
|
fun
|
|
ExistE : (A : Dom) -> (B : Elem A -> Prop) -> (C : Prop) ->
|
|
Proof (Exist A B) -> ((x : Elem A) -> Proof (B x) -> Proof C) ->
|
|
Proof C ;
|
|
|
|
-- use a hypothesis
|
|
Hypo : (A : Prop) -> Proof A -> Proof A ;
|
|
|
|
-- pronoun
|
|
Pron : (A : Dom) -> Elem A -> Elem A ;
|
|
|
|
def
|
|
-- proof normalization; does not tc 13/9/2005
|
|
|
|
ConjEl _ _ (ConjI _ _ a _) = a ;
|
|
ConjEr _ _ (ConjI _ _ _ b) = b ;
|
|
DisjE _ _ _ (DisjIl _ _ a) d _ = d a ;
|
|
DisjE _ _ _ (DisjIr _ _ b) _ e = e b ;
|
|
ImplE _ _ (ImplI _ _ b) a = b a ;
|
|
NegE _ (NegI _ b) a = b a ;
|
|
UnivE _ _ (UnivI _ _ b) a = b a ;
|
|
ExistE A B _ (ExistI A B a b) d = d a b ;
|
|
|
|
--- ExistE _ _ _ (ExistI _ _ a b) d = d a b ;
|
|
--- does not tc 13/9/2005: {a{-2-}<>a{-0-}}
|
|
--- moreover: no problem with
|
|
--- ConjEr _ _ (ConjI _ _ a _) = a ;
|
|
--- But this changes when A B are used instead of _ _
|
|
|
|
-- Hypo and Pron are identities
|
|
Hypo _ a = a ;
|
|
Pron _ a = a ;
|
|
|
|
} ;
|