summaryrefslogtreecommitdiff
path: root/gf-book/examples/chapter8/LogicEng.gf
blob: eae85d2557777f850060480e652fd6bbd2a0ccd0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
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" ;
}