From 76ba03b545600054176612201de78dca16eb65e1 Mon Sep 17 00:00:00 2001 From: aarne Date: Mon, 22 Nov 2010 12:55:37 +0000 Subject: started a subdir for the book --- book/examples/chapter8/LogicEng.gf | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 book/examples/chapter8/LogicEng.gf (limited to 'book/examples/chapter8/LogicEng.gf') diff --git a/book/examples/chapter8/LogicEng.gf b/book/examples/chapter8/LogicEng.gf new file mode 100644 index 000000000..eae85d255 --- /dev/null +++ b/book/examples/chapter8/LogicEng.gf @@ -0,0 +1,39 @@ +concrete LogicEng of Logic = open + SyntaxEng, (P = ParadigmsEng), SymbolicEng, Prelude in { +lincat + Stm = Text ; + Prop = {pos,neg : S ; isAtom : Bool} ; + Atom = Cl ; + Ind = NP ; + Dom = CN ; + Var = NP ; + [Prop] = ListS ; + [Var] = NP ; +lin + SProp p = mkText p.pos ; + And ps = complexProp (mkS and_Conj ps) ; + Or ps = complexProp (mkS or_Conj ps) ; + If A B = complexProp (mkS if_then_Conj (mkListS A.pos B.pos)) ; + Not A = complexProp A.neg ; + All xs A B = complexProp (mkS (mkAdv for_Prep + (mkNP all_Predet (mkNP a_Quant plNum (mkCN A xs)))) B.pos) ; + Exist xs A B = complexProp (mkS (mkAdv for_Prep + (mkNP somePl_Det (mkCN A xs))) B.pos) ; + PAtom p = + {pos = mkS p ; neg = mkS negativePol p ; isAtom = True} ; + IVar x = x ; + VString s = symb s ; + BaseProp A B = mkListS A.pos B.pos ; + ConsProp A As = mkListS A.pos As ; + BaseVar x = x ; + ConsVar x xs = mkNP and_Conj (mkListNP x xs) ; +oper + complexProp : S -> {pos,neg : S ; isAtom : Bool} = \s -> { + pos = s ; + neg = negS s ; + isAtom = False + } ; + negS : S -> S = \s -> mkS negativePol (mkCl (mkNP it_Pron) + (mkNP the_Quant (mkCN (mkCN (P.mkN "case")) s))) ; + if_Then_Conj : Conj = P.mkConj "if" "then" ; +} -- cgit v1.2.3