summaryrefslogtreecommitdiff
path: root/examples/logic
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2006-11-27 10:54:26 +0000
committeraarne <aarne@cs.chalmers.se>2006-11-27 10:54:26 +0000
commita5232f7e5b8f6ca988696f3870f019113edb8d90 (patch)
tree7e9d543ac07c037c0f86dcc00937a4bbc7a8cc63 /examples/logic
parentc75688651e95d1fe69175ca3e4859e6d753b2b8c (diff)
part of Logic implemented generically
Diffstat (limited to 'examples/logic')
-rw-r--r--examples/logic/LexTheory.gf3
-rw-r--r--examples/logic/LexTheoryEng.gf4
-rw-r--r--examples/logic/Logic.gf60
-rw-r--r--examples/logic/LogicEng.gf23
-rw-r--r--examples/logic/LogicI.gf44
-rw-r--r--examples/logic/Prooftext.gf79
-rw-r--r--examples/logic/ProoftextEng.gf12
7 files changed, 224 insertions, 1 deletions
diff --git a/examples/logic/LexTheory.gf b/examples/logic/LexTheory.gf
index 8bdd715a0..7355abab2 100644
--- a/examples/logic/LexTheory.gf
+++ b/examples/logic/LexTheory.gf
@@ -3,6 +3,9 @@ interface LexTheory = open Grammar in {
oper
assume_VS : VS ;
case_N : N ;
+ contradiction_N : N ;
have_V2 : V2 ;
+ hypothesis_N : N ;
+ ifthen_DConj : DConj ;
}
diff --git a/examples/logic/LexTheoryEng.gf b/examples/logic/LexTheoryEng.gf
index 556bd2b24..29c2f21fc 100644
--- a/examples/logic/LexTheoryEng.gf
+++ b/examples/logic/LexTheoryEng.gf
@@ -2,6 +2,8 @@ instance LexTheoryEng of LexTheory = open GrammarEng,ParadigmsEng,IrregEng in {
oper
assume_VS = mkVS (regV "assume") ;
case_N = regN "case" ;
+ contradiction_N = regN "contradiction" ;
have_V2 = dirV2 have_V ;
-
+ hypothesis_N = mk2N "hypothesis" "hypotheses" ;
+ ifthen_DConj = {s1 = "if" ; s2 = "then" ; n = singular ; lock_DConj = <>} ;
}
diff --git a/examples/logic/Logic.gf b/examples/logic/Logic.gf
new file mode 100644
index 000000000..f7bb4ab57
--- /dev/null
+++ b/examples/logic/Logic.gf
@@ -0,0 +1,60 @@
+-- many-sorted predicate calculus
+-- AR 1999, revised 2001 and 2006
+
+abstract Logic = {
+
+cat
+ Prop ; -- proposition
+ Dom ; -- domain of quantification
+ Elem Dom ; -- individual element of a domain
+ Proof Prop ; -- proof of a proposition
+ Hypo Prop ; -- hypothesis 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 ;
+
+ -- inference rules
+
+ ConjI : (A,B : Prop) -> Proof A -> Proof B -> Proof (Conj A B) ;
+ ConjEl : (A,B : Prop) -> Proof (Conj A B) -> Proof A ;
+ ConjEr : (A,B : Prop) -> Proof (Conj A B) -> Proof B ;
+ DisjIl : (A,B : Prop) -> Proof A -> Proof (Disj A B) ;
+ DisjIr : (A,B : Prop) -> Proof B -> Proof (Disj A B) ;
+ DisjE : (A,B,C : Prop) -> Proof (Disj A B) ->
+ (Hypo A -> Proof C) -> (Hypo B -> Proof C) -> Proof C ;
+ ImplI : (A,B : Prop) -> (Hypo A -> Proof B) -> Proof (Impl A B) ;
+ ImplE : (A,B : Prop) -> Proof (Impl A B) -> Proof A -> Proof B ;
+ NegI : (A : Prop) -> (Hypo A -> Proof Abs) -> Proof (Neg A) ;
+ NegE : (A : Prop) -> Proof (Neg A) -> Proof A -> Proof Abs ;
+ AbsE : (C : Prop) -> Proof Abs -> Proof C ;
+ UnivI : (A : Dom) -> (B : Elem A -> Prop) ->
+ ((x : Elem A) -> Proof (B x)) -> Proof (Univ A B) ;
+ UnivE : (A : Dom) -> (B : Elem A -> Prop) ->
+ Proof (Univ A B) -> (a : Elem A) -> Proof (B a) ;
+ ExistI : (A : Dom) -> (B : Elem A -> Prop) ->
+ (a : Elem A) -> Proof (B a) -> Proof (Exist A B) ;
+ 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
+ Hypoth : (A : Prop) -> Hypo A -> Proof A ;
+
+ -- pronoun
+ Pron : (A : Dom) -> Elem A -> Elem A ;
+
+} ;
diff --git a/examples/logic/LogicEng.gf b/examples/logic/LogicEng.gf
new file mode 100644
index 000000000..18f466fa7
--- /dev/null
+++ b/examples/logic/LogicEng.gf
@@ -0,0 +1,23 @@
+--# -path=.:mathematical:present:resource-1.0/api:prelude
+
+concrete LogicEng of Logic = LogicI with
+ (LexTheory = LexTheoryEng),
+ (Prooftext = ProoftextEng),
+ (Grammar = GrammarEng),
+ (Symbolic = SymbolicEng),
+ (Symbol = SymbolEng),
+ (Combinators = CombinatorsEng),
+ (Constructors = ConstructorsEng),
+ ;
+
+{-
+ImplI Abs Abs (\h -> DisjE Abs Abs Abs (DisjIr Abs Abs (Hypoth Abs h))
+(\x -> Hypoth Abs x) (\y -> Hypoth Abs y))
+
+assume that we have a contradiction . by the hypothesis we have a contradiction .
+a fortiori we have a contradiction or we have a contradiction .
+we have two cases. assume that we have a contradiction .
+by the hypothesis we have a contradiction . assume that we have a contradiction .
+by the hypothesis we have a contradiction . therefore we have a contradiction .
+therefore if we have a contradiction then we have a contradiction .
+-}
diff --git a/examples/logic/LogicI.gf b/examples/logic/LogicI.gf
new file mode 100644
index 000000000..c9c374622
--- /dev/null
+++ b/examples/logic/LogicI.gf
@@ -0,0 +1,44 @@
+incomplete concrete LogicI of Logic =
+ open
+ LexTheory,
+ Prooftext,
+ Grammar,
+ Constructors,
+ Combinators
+ in {
+
+lincat
+ Prop = Prooftext.Prop ;
+ Proof = Prooftext.Proof ;
+ Dom = Typ ;
+ Elem = Object ;
+ Hypo = Label ;
+ Text = Section ;
+
+lin
+ Disj A B = coord or_Conj A B ;
+ Impl A B = coord ifthen_DConj A B ;
+
+ Abs = mkS (pred have_V2 (mkNP we_Pron) (mkNP (mkDet IndefArt) contradiction_N)) ;
+
+ DisjIl A B a = proof a (proof afortiori (coord or_Conj A B)) ;
+ DisjIr A B b = proof b (proof afortiori (coord or_Conj A B)) ;
+
+ DisjE A B C c b1 b2 =
+ appendText
+ c
+ (appendText
+ (appendText
+ (cases (mkNum n2))
+ (proofs
+ (appendText (assumption A) b1)
+ (appendText (assumption B) b2)))
+ (proof therefore C)) ;
+
+ ImplI A B b =
+ proof (assumption A) (appendText b (proof therefore (coord ifthen_DConj A B))) ;
+
+ Hypoth A h = proof hypothesis A ;
+
+
+} \ No newline at end of file
diff --git a/examples/logic/Prooftext.gf b/examples/logic/Prooftext.gf
new file mode 100644
index 000000000..e6a6c710c
--- /dev/null
+++ b/examples/logic/Prooftext.gf
@@ -0,0 +1,79 @@
+interface Prooftext = open
+ Grammar,
+ LexTheory,
+ Symbolic,
+ Symbol,
+ (C=ConstructX),
+ Constructors,
+ Combinators
+ in {
+
+oper
+ Chapter = Text ;
+ Section = Text ;
+ Sections = Text ;
+ Decl = Text ;
+ Decls = Text ;
+ Prop = S ;
+ Branching= S ;
+ Proof = Text ;
+ Proofs = Text ;
+ Typ = CN ;
+ Object = NP ;
+ Label = NP ;
+ Adverb = PConj ;
+ Ref = NP ;
+ Refs = [NP] ;
+ Number = Num ;
+
+ chapter : Label -> Sections -> Chapter
+ = \title,jments ->
+ appendText (mkText (mkPhr (mkUtt title)) TEmpty) jments ;
+
+ definition : Decls -> Object -> Object -> Section
+ = \decl,a,b ->
+ appendText decl (mkUtt (mkS (pred b a))) ;
+
+ assumption : Prop -> Decl
+ = \p ->
+ mkText (mkPhr (mkUtt (mkImp (mkVP assume_VS p)))) TEmpty ;
+
+ declaration : Object -> Typ -> Decl
+ = \a,ty ->
+ mkText (mkPhr (mkUtt (mkImp (mkVP assume_VS (mkS (pred ty a)))))) TEmpty ;
+
+ proof = overload {
+ proof : Prop -> Proof
+ = \p -> mkText (mkPhr p) TEmpty ;
+ proof : Adverb -> Prop -> Proof
+ = \a,p -> mkText (mkPhr a (mkUtt p) NoVoc) TEmpty ;
+ proof : Decl -> Proof
+ = \d -> d ;
+ proof : Proof -> Proof -> Proof
+ = \p,q -> appendText p q ;
+ proof : Branching -> Proofs -> Proof
+ = \b,ps -> mkText (mkPhr b) ps
+ } ;
+
+ proofs : Proof -> Proof -> Proofs
+ = appendText ;
+
+ cases : Num -> Branching
+ = \nu ->
+ mkS (pred have_V2 (mkNP we_Pron) (mkNP (mkDet nu) case_N)) ;
+
+ by : Ref -> Adverb
+ = \h -> mkAdv by8means_Prep h ;
+ therefore : Adverb
+ = therefore_PConj ;
+ afortiori : Adverb
+ = C.mkPConj ["a fortiori"] ;
+ hypothesis : Adverb
+ = mkAdv by8means_Prep (mkNP (mkDet DefArt) hypothesis_N) ;
+
+ ref : Label -> Ref
+ = \h -> h ;
+ refs : Refs -> Ref
+ = \rs -> mkNP and_Conj rs ;
+
+}
diff --git a/examples/logic/ProoftextEng.gf b/examples/logic/ProoftextEng.gf
new file mode 100644
index 000000000..02ad3492f
--- /dev/null
+++ b/examples/logic/ProoftextEng.gf
@@ -0,0 +1,12 @@
+--# -path=.:mathematical:present:resource-1.0/api:prelude
+
+instance ProoftextEng of Prooftext = open
+ LexTheoryEng,
+ GrammarEng,
+ SymbolicEng,
+ SymbolEng,
+ (C=ConstructX),
+ CombinatorsEng,
+ ConstructorsEng in {
+ }
+ ;