summaryrefslogtreecommitdiff
path: root/src/GF/UseGrammar/Paraphrases.hs
blob: 41a407d6eb6126ee5e8ea87a98aed98fdb45c732 (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
40
41
42
43
44
45
46
47
48
49
50
51
52
module Paraphrases (mkParaphrases) where

import Abstract
import PrGrammar
import LookAbs
import AbsCompute

import Operations

import List (nub)

-- paraphrases of GF terms. AR 6/10/1998 -- 24/9/1999 -- 5/7/2000 -- 5/6/2002
-- Copyright (c) Aarne Ranta 1998--99, under GNU General Public License (see GPL)
-- thus inherited from the old GF. Incomplete and inefficient...

mkParaphrases :: GFCGrammar -> Term -> [Term]
mkParaphrases st = nub . map (beta []) . paraphrases (allDefs st)

type Definition = (Fun,Term)

paraphrases :: [Definition] -> Term -> [Term]
paraphrases th t =
  paraImmed th t ++
---  paraMatch th t ++
  case t of
    App c a -> [App d b | d <- paraphrases th c, b <- paraphrases th a]
    Abs x b -> [Abs x d | d <- paraphrases th b]
    c       -> []
  ++ [t]

paraImmed :: [Definition] -> Term -> [Term]
paraImmed defs t = 
  [Q m f | ((m,f), u) <- defs, t == u] ++ --- eqTerm
  case t of
  ----  Cn c -> [u | (f, u) <- defs, eqStrIdent f c]
    _    -> []

{- ---
paraMatch :: [Definition] -> Trm -> [Trm]
paraMatch th@defs t = 
 [mkApp (Cn f) xx | (PC f zz, u) <- defs, 
                    let (fs,sn) = fullApp u, fs == h, length sn == length zz] ++
 case findAMatch defs t of
   Ok (g,b) -> [substTerm [] g b]
   _        -> []
  where 
    (h,xx)    = fullApp t
    fullApp c = case c of 
                  App f a -> (f', a' ++ [a]) where (f',a') = fullApp f
                  c       -> (c,[])

-}