mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
mathtext examples from Bonn
This commit is contained in:
12
examples/mathtext/Geometry.gf
Normal file
12
examples/mathtext/Geometry.gf
Normal file
@@ -0,0 +1,12 @@
|
||||
abstract Geometry = Logic ** {
|
||||
fun
|
||||
Line, Point, Circle : Dom ;
|
||||
Intersect, Parallel : Ind -> Ind -> Atom ;
|
||||
Vertical : Ind -> Atom ;
|
||||
Centre : Ind -> Ind ;
|
||||
|
||||
Horizontal : Pred1 ;
|
||||
Diverge : Pred1 ;
|
||||
|
||||
Contain : Pred2 ;
|
||||
}
|
||||
18
examples/mathtext/GeometryEng.gf
Normal file
18
examples/mathtext/GeometryEng.gf
Normal file
@@ -0,0 +1,18 @@
|
||||
--# -path=alltenses
|
||||
|
||||
concrete GeometryEng of Geometry = LogicEng **
|
||||
open SyntaxEng, ParadigmsEng in {
|
||||
lin
|
||||
Line = mkN "line" ;
|
||||
Point = mkN "point" ;
|
||||
Circle = mkN "circle" ;
|
||||
Intersect = pred (mkV2 "intersect") ;
|
||||
Parallel = pred (mkA2 (mkA "parallel") (mkPrep "to")) ;
|
||||
Vertical = pred (mkA "vertical") ;
|
||||
Centre = app (mkN2 (mkN "centre") (mkPrep "of")) ;
|
||||
|
||||
Horizontal = mkVP (mkA "horizontal") ;
|
||||
Diverge = mkVP (mkV "diverge") ;
|
||||
|
||||
Contain = mkVPSlash (mkV2 "contain") ;
|
||||
}
|
||||
18
examples/mathtext/GeometryFre.gf
Normal file
18
examples/mathtext/GeometryFre.gf
Normal file
@@ -0,0 +1,18 @@
|
||||
--# -path=alltenses
|
||||
|
||||
concrete GeometryFre of Geometry = LogicFre **
|
||||
open SyntaxFre, ParadigmsFre, IrregFre in {
|
||||
lin
|
||||
Line = mkN "ligne" ;
|
||||
Point = mkN "point" ;
|
||||
Circle = mkN "cercle" masculine ;
|
||||
Intersect = pred (mkV2 "couper") ;
|
||||
Parallel = pred (mkA2 (mkA "parallèle") dative) ;
|
||||
Vertical = pred (mkA "vertical") ;
|
||||
Centre = app (mkN2 (mkN "centre" masculine) genitive) ;
|
||||
|
||||
Horizontal = mkVP (mkA "horizontel") ;
|
||||
Diverge = mkVP (mkV "diverger") ;
|
||||
|
||||
Contain = mkVPSlash contenir_V2 ;
|
||||
}
|
||||
19
examples/mathtext/GeometryGer.gf
Normal file
19
examples/mathtext/GeometryGer.gf
Normal file
@@ -0,0 +1,19 @@
|
||||
--# -path=alltenses
|
||||
|
||||
concrete GeometryGer of Geometry = LogicGer **
|
||||
open SyntaxGer, ParadigmsGer, IrregGer in {
|
||||
lin
|
||||
Line = mkN "Gerade" ;
|
||||
Point = mkN "Punkt" ;
|
||||
Circle = mkN "Kreis" ;
|
||||
Intersect = pred (mkV2 (mkV "schneiden")) ;
|
||||
Parallel = pred (mkA2 (mkA "parallel") (mkPrep "zu" dative)) ;
|
||||
Vertical = pred (mkA "vertikal") ;
|
||||
Centre = app (mkN2 (mkN "Mittelpunkt") (mkPrep [] genitive)) ;
|
||||
|
||||
Horizontal = mkVP (mkA "horizontal") ;
|
||||
Diverge = mkVP (mkV "divergieren") ;
|
||||
|
||||
Contain = mkVPSlash (mkV2 (fixprefixV "ent" halten_V)) ;
|
||||
|
||||
}
|
||||
20
examples/mathtext/LexLogic.gf
Normal file
20
examples/mathtext/LexLogic.gf
Normal file
@@ -0,0 +1,20 @@
|
||||
interface LexLogic = open Syntax, Prelude in {
|
||||
|
||||
oper
|
||||
case_N : N ; -- it is not the case that
|
||||
such_A : A ; -- number such that
|
||||
by_Prep : Prep ; -- by Thm 5
|
||||
all_Det : Det ; -- the article with "all"
|
||||
axiom_N : N ;
|
||||
theorem_N : N ;
|
||||
definition_N : N ;
|
||||
define_V3 : V3 ; -- we define a as b
|
||||
define_V2V : V2V ; -- we define x to be f if p
|
||||
iff_Subj : Subj ; -- if and only if
|
||||
oper
|
||||
indef : Bool -> CN -> NP = \b -> case b of {
|
||||
True => mkNP aPl_Det ;
|
||||
False => mkNP aSg_Det
|
||||
} ;
|
||||
|
||||
}
|
||||
15
examples/mathtext/LexLogicEng.gf
Normal file
15
examples/mathtext/LexLogicEng.gf
Normal file
@@ -0,0 +1,15 @@
|
||||
instance LexLogicEng of LexLogic = open SyntaxEng, ParadigmsEng,
|
||||
(MS = MakeStructuralEng), Prelude in {
|
||||
|
||||
oper
|
||||
case_N = mkN "case" ;
|
||||
such_A = mkA "such" ;
|
||||
by_Prep = mkPrep "by" ;
|
||||
all_Det = aPl_Det ;
|
||||
axiom_N = mkN "axiom" ;
|
||||
theorem_N = mkN "theorem" ;
|
||||
definition_N = mkN "definition" ;
|
||||
define_V3 = mkV3 (mkV "define") (mkPrep [] ) (mkPrep "as") ;
|
||||
define_V2V = mkV2V (mkV "define") (mkPrep [] ) (mkPrep []) ;
|
||||
iff_Subj = MS.mkSubj "if and only if" ;
|
||||
}
|
||||
16
examples/mathtext/LexLogicFre.gf
Normal file
16
examples/mathtext/LexLogicFre.gf
Normal file
@@ -0,0 +1,16 @@
|
||||
instance LexLogicFre of LexLogic = open SyntaxFre, ParadigmsFre,
|
||||
(MS = MakeStructuralFre), Prelude in {
|
||||
|
||||
oper
|
||||
case_N = mkN "cas" ;
|
||||
such_A = mkA "tel" "telle" ;
|
||||
by_Prep = mkPrep "par" ;
|
||||
all_Det = thePl_Det ;
|
||||
axiom_N = mkN "axiome" masculine ;
|
||||
theorem_N = mkN "théorème" masculine ;
|
||||
definition_N = mkN "définition" feminine ;
|
||||
define_V3 = mkV3 (mkV "définir") (mkPrep []) (mkPrep "comme") ;
|
||||
define_V2V = mkV2V (mkV "définir") (mkPrep []) genitive ;
|
||||
iff_Subj = MS.mkSubj ("si et seulement" ++ if_Subj.s) ; --- .s
|
||||
|
||||
}
|
||||
16
examples/mathtext/LexLogicGer.gf
Normal file
16
examples/mathtext/LexLogicGer.gf
Normal file
@@ -0,0 +1,16 @@
|
||||
instance LexLogicGer of LexLogic = open SyntaxGer, ParadigmsGer,
|
||||
(MS = MakeStructuralGer), Prelude in {
|
||||
|
||||
oper
|
||||
case_N = mkN "Fall" "Fälle" masculine ;
|
||||
such_A = invarA "derart" ; ----
|
||||
by_Prep = mkPrep "durch" accusative ;
|
||||
all_Det = aPl_Det ;
|
||||
axiom_N = mkN "Axiom" ;
|
||||
theorem_N = mkN "Theorem" ;
|
||||
definition_N = mkN "Definition" ;
|
||||
define_V3 =
|
||||
mkV3 (mkV "definieren") (mkPrep [] accusative) (mkPrep "als" accusative) ;
|
||||
define_V2V = mkV2V (mkV "definieren") (mkPrep [] accusative) ;
|
||||
iff_Subj = MS.mkSubj "wenn und nur wenn" ;
|
||||
}
|
||||
24
examples/mathtext/Logic.gf
Normal file
24
examples/mathtext/Logic.gf
Normal file
@@ -0,0 +1,24 @@
|
||||
abstract Logic = Symbols ** {
|
||||
|
||||
-- flags startcat = Prop ;
|
||||
|
||||
cat
|
||||
Prop ; Atom ; Ind ; Dom ; Var ; [Prop] {2} ; [Var] {1} ;
|
||||
fun
|
||||
And, Or : [Prop] -> Prop ;
|
||||
If, Iff : Prop -> Prop -> Prop ;
|
||||
Not : Prop -> Prop ;
|
||||
All, Exist : [Var] -> Dom -> Prop -> Prop ;
|
||||
PAtom : Atom -> Prop ;
|
||||
NAtom : Atom -> Prop ;
|
||||
MkVar : String -> Var ;
|
||||
|
||||
PExp : Exp -> Prop ;
|
||||
IExp : Exp -> Ind ;
|
||||
|
||||
cat
|
||||
Pred1 ; Pred2 ;
|
||||
fun
|
||||
PredPred1 : Pred1 -> Ind -> Atom ;
|
||||
PredPred2 : Pred2 -> Ind -> Ind -> Atom ;
|
||||
}
|
||||
5
examples/mathtext/LogicEng.gf
Normal file
5
examples/mathtext/LogicEng.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
concrete LogicEng of Logic = SymbolsX ** LogicI with
|
||||
(LexLogic = LexLogicEng),
|
||||
(Lang = LangEng),
|
||||
(Syntax = SyntaxEng),
|
||||
(Symbolic = SymbolicEng) ;
|
||||
15
examples/mathtext/LogicFre.gf
Normal file
15
examples/mathtext/LogicFre.gf
Normal file
@@ -0,0 +1,15 @@
|
||||
concrete LogicFre of Logic = SymbolsX ** LogicI - [Exist] with
|
||||
(LexLogic = LexLogicFre),
|
||||
(Lang = LangFre),
|
||||
(Syntax = SyntaxFre),
|
||||
(Symbolic = SymbolicFre) ** open SyntaxFre in {
|
||||
|
||||
lin
|
||||
--- to get the mood of the that clause correct
|
||||
Exist xs A B =
|
||||
Lang.SSubjS
|
||||
(mkS (mkCl (indef xs.p2
|
||||
(mkCN such_A (mkCN A xs.p1)))))
|
||||
that_Subj B ;
|
||||
|
||||
} ;
|
||||
15
examples/mathtext/LogicGer.gf
Normal file
15
examples/mathtext/LogicGer.gf
Normal file
@@ -0,0 +1,15 @@
|
||||
concrete LogicGer of Logic = SymbolsX ** LogicI - [Exist] with
|
||||
(LexLogic = LexLogicGer),
|
||||
(Lang = LangGer),
|
||||
(Syntax = SyntaxGer),
|
||||
(Symbolic = SymbolicGer) ** open SyntaxGer, (P = ParadigmsGer) in {
|
||||
|
||||
lin
|
||||
--- to get the extraposited clause in correct place
|
||||
Exist xs A B =
|
||||
Lang.SSubjS
|
||||
(mkS (mkCl (indef xs.p2
|
||||
(mkCN (mkCN A xs.p1) (P.mkAdv "derart")))))
|
||||
that_Subj B ;
|
||||
|
||||
} ;
|
||||
48
examples/mathtext/LogicI.gf
Normal file
48
examples/mathtext/LogicI.gf
Normal file
@@ -0,0 +1,48 @@
|
||||
incomplete concrete LogicI of Logic = SymbolsX ** open
|
||||
LexLogic,
|
||||
Syntax,
|
||||
Symbolic,
|
||||
(Lang = Lang), -- for SSubjS
|
||||
Prelude in {
|
||||
lincat
|
||||
Prop = S ;
|
||||
Atom = Cl ;
|
||||
Ind = NP ;
|
||||
Dom = N ;
|
||||
Var = NP ;
|
||||
[Prop] = [S] ;
|
||||
[Var] = NP * Bool ;
|
||||
lin
|
||||
And = mkS and_Conj ;
|
||||
Or = mkS or_Conj ;
|
||||
If A B = mkS (mkAdv if_Subj A) B ;
|
||||
Iff A B = Lang.SSubjS A iff_Subj B ;
|
||||
Not A =
|
||||
Lang.SSubjS
|
||||
(mkS negativePol (mkCl
|
||||
(mkVP (mkNP the_Quant case_N)))) that_Subj A ;
|
||||
All xs A B = mkS (mkAdv for_Prep (mkNP all_Predet
|
||||
(mkNP all_Det (mkCN A xs.p1)))) B ;
|
||||
Exist xs A B = mkS (mkCl (indef xs.p2
|
||||
(mkCN (mkCN A xs.p1) (mkAP (mkAP such_A) B)))) ;
|
||||
PAtom = mkS ;
|
||||
NAtom = mkS negativePol ;
|
||||
MkVar s = symb (dollar s.s) ;
|
||||
BaseProp = mkListS ;
|
||||
ConsProp = mkListS ;
|
||||
BaseVar x = <x,False> ;
|
||||
ConsVar x xs = <mkNP and_Conj (mkListNP x xs.p1), True> ;
|
||||
|
||||
PExp e = symb (mkSymb (dollar e.s)) ;
|
||||
IExp e = symb (dollar e.s) ;
|
||||
|
||||
lincat
|
||||
Pred1 = VP ;
|
||||
Pred2 = VPSlash ;
|
||||
lin
|
||||
PredPred1 f x = mkCl x f ;
|
||||
PredPred2 f x y = mkCl x (mkVP f y) ;
|
||||
|
||||
oper
|
||||
dollar : Str -> Str = \s -> "$" ++ s ++ "$" ;
|
||||
}
|
||||
1
examples/mathtext/MathGeom.gf
Normal file
1
examples/mathtext/MathGeom.gf
Normal file
@@ -0,0 +1 @@
|
||||
abstract MathGeom = Geometry, MathText ;
|
||||
4
examples/mathtext/MathGeomEng.gf
Normal file
4
examples/mathtext/MathGeomEng.gf
Normal file
@@ -0,0 +1,4 @@
|
||||
--# -path=.:present
|
||||
|
||||
concrete MathGeomEng of MathGeom = GeometryEng, MathTextEng ;
|
||||
|
||||
4
examples/mathtext/MathGeomFre.gf
Normal file
4
examples/mathtext/MathGeomFre.gf
Normal file
@@ -0,0 +1,4 @@
|
||||
--# -path=.:present
|
||||
|
||||
concrete MathGeomFre of MathGeom = GeometryFre, MathTextFre ;
|
||||
|
||||
4
examples/mathtext/MathGeomGer.gf
Normal file
4
examples/mathtext/MathGeomGer.gf
Normal file
@@ -0,0 +1,4 @@
|
||||
--# -path=.:present
|
||||
|
||||
concrete MathGeomGer of MathGeom = GeometryGer, MathTextGer ;
|
||||
|
||||
45
examples/mathtext/MathText.gf
Normal file
45
examples/mathtext/MathText.gf
Normal file
@@ -0,0 +1,45 @@
|
||||
abstract MathText = Logic ** {
|
||||
|
||||
flags startcat = Book ;
|
||||
|
||||
cat
|
||||
Book ;
|
||||
Section ;
|
||||
[Section] {1} ;
|
||||
Paragraph ;
|
||||
[Paragraph] {1} ;
|
||||
Statement ;
|
||||
Declaration ;
|
||||
[Declaration] {0} ;
|
||||
Ident ;
|
||||
Proof ;
|
||||
Case ;
|
||||
[Case] {2} ;
|
||||
Number ;
|
||||
|
||||
fun
|
||||
MkBook : [Section] -> Book ;
|
||||
|
||||
ParAxiom : Ident -> Statement -> Section ;
|
||||
ParTheorem : Ident -> Statement -> Proof -> Section ;
|
||||
|
||||
ParDefInd : [Declaration] -> Ind -> Ind -> Section ;
|
||||
ParDefPred1 : [Declaration] -> Ind -> Pred1 -> Prop -> Section ;
|
||||
ParDefPred2 : [Declaration] -> Ind -> Pred2 -> Ind -> Prop -> Section ;
|
||||
|
||||
StProp : [Declaration] -> Prop -> Statement ;
|
||||
|
||||
DecVar : [Var] -> Dom -> Declaration ;
|
||||
DecProp : Prop -> Declaration ;
|
||||
|
||||
PrEnd : Proof ;
|
||||
PrStep : Statement -> Proof -> Proof ;
|
||||
PrBy : Ident -> Prop -> Proof -> Proof ;
|
||||
PrCase : Number -> [Case] -> Proof ;
|
||||
CProof : Ident -> Proof -> Case ;
|
||||
|
||||
IdStr : String -> Ident ;
|
||||
|
||||
Two, Three, Four, Five : Number ;
|
||||
|
||||
}
|
||||
5
examples/mathtext/MathTextEng.gf
Normal file
5
examples/mathtext/MathTextEng.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
concrete MathTextEng of MathText = LogicEng ** MathTextI with
|
||||
(LexLogic = LexLogicEng),
|
||||
(Syntax = SyntaxEng),
|
||||
(Lang = LangEng), ---- ImpP3
|
||||
(Symbolic = SymbolicEng) ;
|
||||
5
examples/mathtext/MathTextFre.gf
Normal file
5
examples/mathtext/MathTextFre.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
concrete MathTextFre of MathText = LogicFre ** MathTextI with
|
||||
(LexLogic = LexLogicFre),
|
||||
(Syntax = SyntaxFre),
|
||||
(Lang = LangFre), ---- ImpP3
|
||||
(Symbolic = SymbolicFre) ;
|
||||
5
examples/mathtext/MathTextGer.gf
Normal file
5
examples/mathtext/MathTextGer.gf
Normal file
@@ -0,0 +1,5 @@
|
||||
concrete MathTextGer of MathText = LogicGer ** MathTextI with
|
||||
(LexLogic = LexLogicGer),
|
||||
(Syntax = SyntaxGer),
|
||||
(Lang = LangGer), ---- for ImpP3
|
||||
(Symbolic = SymbolicGer) ;
|
||||
74
examples/mathtext/MathTextI.gf
Normal file
74
examples/mathtext/MathTextI.gf
Normal file
@@ -0,0 +1,74 @@
|
||||
incomplete concrete MathTextI of MathText = Logic **
|
||||
open
|
||||
Syntax,
|
||||
(Lang = Lang), ---- for ImpP3, SSubjS
|
||||
Symbolic,
|
||||
LexLogic in {
|
||||
|
||||
lincat
|
||||
Book = Text ;
|
||||
Section = Text ;
|
||||
[Section] = Text ;
|
||||
Paragraph = Text ;
|
||||
[Paragraph] = Text ;
|
||||
Statement = Text ;
|
||||
Declaration = Utt ;
|
||||
[Declaration] = Text ;
|
||||
Ident = NP ;
|
||||
Proof = Text ;
|
||||
Case = Text ;
|
||||
[Case] = Text ;
|
||||
Number = Card ;
|
||||
|
||||
lin
|
||||
MkBook ss = ss ;
|
||||
|
||||
ParAxiom id stm = mkText (mkText (Lang.UttCN (mkCN axiom_N id))) stm ;
|
||||
ParTheorem id stm pr =
|
||||
mkText (mkText (mkText (Lang.UttCN (mkCN theorem_N id))) stm) pr ;
|
||||
|
||||
ParDefInd cont dum dens =
|
||||
definition (mkText cont (mkText (mkCl (mkNP we_Pron) define_V3 dum dens))) ;
|
||||
ParDefPred1 cont arg dum dens =
|
||||
definition (mkText cont (mkText (Lang.SSubjS
|
||||
(mkS (mkCl (mkNP we_Pron) define_V2V arg dum))
|
||||
if_Subj dens))) ;
|
||||
ParDefPred2 cont arg dum obj dens =
|
||||
definition (mkText cont (mkText (Lang.SSubjS
|
||||
(mkS (mkCl (mkNP we_Pron) define_V2V arg (mkVP dum obj)))
|
||||
if_Subj dens))) ;
|
||||
|
||||
BaseSection s = s ;
|
||||
ConsSection s ss = mkText s ss ;
|
||||
BaseParagraph s = s ;
|
||||
ConsParagraph s ss = mkText s ss ;
|
||||
BaseCase s t = mkText s t ;
|
||||
ConsCase s ss = mkText s ss ;
|
||||
BaseDeclaration = emptyText ;
|
||||
ConsDeclaration s ss = mkText (mkPhr s) ss ;
|
||||
|
||||
|
||||
StProp ds prop = mkText ds (mkText prop) ;
|
||||
|
||||
DecVar xs dom =
|
||||
Lang.ImpP3 xs.p1 (mkVP (indef xs.p2 (mkCN dom))) ;
|
||||
-- mkUtt (mkImp (mkVP let_V2V xs.p1 (mkVP (indef xs.p2 (mkCN dom))))) ;
|
||||
DecProp prop = mkUtt prop ;
|
||||
|
||||
PrEnd = emptyText ;
|
||||
PrStep st pr = mkText st pr ;
|
||||
PrBy id prop proof = mkText (mkText (mkS (mkAdv by_Prep id) prop)) proof ;
|
||||
PrCase num cs =
|
||||
mkText (mkPhr (mkCl (mkNP we_Pron) have_V2 (mkNP num case_N))) cs ;
|
||||
CProof id proof = mkText (mkPhr (mkUtt (mkNP (mkCN case_N id)))) proof ;
|
||||
|
||||
IdStr s = symb s.s ;
|
||||
|
||||
Two = mkCard n2_Numeral ;
|
||||
Three = mkCard n3_Numeral ;
|
||||
Four = mkCard n4_Numeral ;
|
||||
Five = mkCard n5_Numeral ;
|
||||
|
||||
oper
|
||||
definition : Text -> Text = mkText (mkText (Lang.UttCN (mkCN definition_N))) ;
|
||||
}
|
||||
10
examples/mathtext/Symbols.gf
Normal file
10
examples/mathtext/Symbols.gf
Normal file
@@ -0,0 +1,10 @@
|
||||
abstract Symbols = {
|
||||
|
||||
cat
|
||||
Exp ;
|
||||
|
||||
fun
|
||||
-- EInt : Int -> Expp ; --- clashes with EVar...
|
||||
EVar : String -> Exp ;
|
||||
EIn, EPlus, ETimes, EEq, EGt, ELt : Exp -> Exp -> Exp ;
|
||||
}
|
||||
15
examples/mathtext/SymbolsX.gf
Normal file
15
examples/mathtext/SymbolsX.gf
Normal file
@@ -0,0 +1,15 @@
|
||||
concrete SymbolsX of Symbols = open Formal in {
|
||||
|
||||
lincat
|
||||
Exp = TermPrec ;
|
||||
|
||||
lin
|
||||
-- EInt i = constant i.s ;
|
||||
EVar x = constant x.s ;
|
||||
EIn = infixn 0 "\\in" ;
|
||||
EPlus = infixl 2 "+" ;
|
||||
ETimes = infixl 3 "*" ;
|
||||
EEq = infixn 0 "=" ;
|
||||
EGt = infixn 0 ">" ;
|
||||
ELt = infixn 0 "<" ;
|
||||
}
|
||||
Reference in New Issue
Block a user