Changeset 12719

Show
Ignore:
Timestamp:
26.10.2009 12:08:28 (4 weeks ago)
Author:
maeder
Message:

removed duplicate code and now unnecessary renaming

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/Comorphisms/CASL2PCFOL.hs

    r12718 r12719  
    9696    -- membership predicates are coded out 
    9797 
     98mkAxName :: String -> SORT -> SORT -> String 
     99mkAxName str s s' = "ga_" ++ str ++ "_" ++ show s ++ "_to_" ++ show s' 
     100 
    98101-- | Make the name for the embedding or projecton injectivity axiom 
    99102mkInjectivityName :: String -> SORT -> SORT -> String 
    100 mkInjectivityName str s s' = 
    101     "ga_" ++ str ++ "_injectivity_" ++ show s ++ "_to_" ++ show s' 
     103mkInjectivityName = mkAxName . (++ "_injectivity") 
    102104 
    103105-- | Make the name for the embedding injectivity axiom 
     
    109111mkProjInjName s s' = mkInjectivityName "projection" s' s 
    110112 
     113-- | create a quantified injectivity implication 
    111114mkInjectivity :: (TERM () -> TERM ()) -> VAR_DECL -> VAR_DECL -> FORMULA () 
    112115mkInjectivity f vx vy = mkForall [vx, vy] 
    113116  (mkInjImpl f (toQualVar vx) $ toQualVar vy) nullRange 
    114117 
    115 -- 
     118-- | create an injectivity implication over x and y 
    116119mkInjImpl :: (TERM () -> TERM ()) -> TERM () -> TERM () -> FORMULA () 
    117120mkInjImpl f x y = mkImpl (mkExEq (f x) (f y)) (mkExEq x y) 
    118121 
     122-- | apply injection function 
     123injectTo :: SORT -> TERM () -> TERM () 
     124injectTo s q = injectUnique nullRange q s 
     125 
     126-- | apply (a partial) projection function 
     127projectTo :: SORT -> TERM () -> TERM () 
     128projectTo s q = projectUnique Partial nullRange q s 
     129 
    119130-- | Make the named sentence for the embedding injectivity axiom from s to s' 
    120131--   i.e., forall x,y:s . inj(x)=e=inj(y) => x=e=y 
    121 mkEmbInjAxiom:: SORT -> SORT -> Named (FORMULA ()) 
    122 mkEmbInjAxiom s s' = let appInj q = injectUnique nullRange q s' in 
     132mkEmbInjAxiom :: SORT -> SORT -> Named (FORMULA ()) 
     133mkEmbInjAxiom s s' = 
    123134    makeNamed (mkEmbInjName s s') 
    124       $ mkInjectivity appInj (mkVarDeclStr "x" s) $ mkVarDeclStr "y" s 
     135      $ mkInjectivity (injectTo s') (mkVarDeclStr "x" s) $ mkVarDeclStr "y" s 
    125136 
    126137-- | Make the named sentence for the projection injectivity axiom from s' to s 
    127138--   i.e., forall x,y:s . pr(x)=e=pr(y) => x=e=y 
    128 mkProjInjAxiom:: SORT -> SORT -> Named (FORMULA ()) 
    129 mkProjInjAxiom s s' = let appProj q = projectUnique Partial nullRange q s in 
     139mkProjInjAxiom :: SORT -> SORT -> Named (FORMULA ()) 
     140mkProjInjAxiom s s' = 
    130141    makeNamed (mkProjInjName s s') 
    131       $ mkInjectivity appProj (mkVarDeclStr "x" s') $ mkVarDeclStr "y" s' 
     142      $ mkInjectivity (projectTo s) (mkVarDeclStr "x" s') $ mkVarDeclStr "y" s' 
    132143 
    133144-- | Make the name for the projection axiom 
    134145mkProjName :: SORT -> SORT -> String 
    135 mkProjName s s' = 
    136     "ga_projection_" ++ show s ++ "_to_" ++ show s' ++ "_to_" ++ show s 
     146mkProjName = mkAxName "projection" 
     147 
     148-- | create an existential equation over x of sort s 
     149mkXExEq :: SORT -> (TERM () -> TERM ()) -> (TERM () -> TERM ()) -> FORMULA () 
     150mkXExEq s fl fr = let 
     151  vx = mkVarDeclStr "x" s 
     152  qualX = toQualVar vx 
     153  in mkForall [vx] (mkExEq (fl qualX) (fr qualX)) nullRange 
    137154 
    138155-- | Make the named sentence for the projection axiom from s' to s 
    139156--   i.e., forall x:s . pr(inj(x))=e=x 
    140157mkProjAxiom:: SORT -> SORT -> Named (FORMULA ()) 
    141 mkProjAxiom s s' = 
    142     makeNamed (mkProjName s s') 
    143       $ (mkForall [vx] 
    144             (mkExEq 
    145                 (appProj $ injectUnique nullRange qualX s') 
    146                 qualX 
    147             ) nullRange 
    148         ) 
    149     where appProj x = projectUnique Partial nullRange x s 
    150           vx = mkVarDeclStr "x" s 
    151           qualX = toQualVar vx 
     158mkProjAxiom s s' = makeNamed (mkProjName s s') 
     159    $ mkXExEq s (projectTo s . injectTo s') id 
    152160 
    153161-- | Make the name for the transitivity axiom from s to s' to s'' 
    154162mkTransAxiomName :: SORT -> SORT -> SORT -> String 
    155163mkTransAxiomName s s' s'' = 
    156     "ga_transitivity_" ++ show s ++ "_to_" ++ show s' ++ "_to_" ++ show s'' 
     164  mkAxName "transitivity" s s' ++ "_to_" ++ show s'' 
    157165 
    158166-- | Make the named sentence for the transitivity axiom from s to s' to s'' 
    159167--   i.e., forall x:s . inj(inj(x))=e=inj(x) 
    160168mkTransAxiom:: SORT -> SORT -> SORT -> Named (FORMULA ()) 
    161 mkTransAxiom s s' s'' = 
    162     makeNamed name 
    163         (mkForall [vx] 
    164             (mkExEq 
    165                 (injectUnique nullRange (injectUnique nullRange qualX s') s'') 
    166                 (injectUnique nullRange qualX s'') 
    167             ) nullRange 
    168         ) 
    169     where name = mkTransAxiomName s s' s'' 
    170           vx = mkVarDeclStr "x" s 
    171           qualX = toQualVar vx 
     169mkTransAxiom s s' s'' = makeNamed (mkTransAxiomName s s' s'') 
     170    $ mkXExEq s (injectTo s'' . injectTo s') $ injectTo s'' 
    172171 
    173172-- | Make the name for the identity axiom from s to s' 
    174173mkIdAxiomName :: SORT -> SORT -> String 
    175 mkIdAxiomName s s' = 
    176     "ga_identity_" ++ show s ++ "_to_" ++ show s' ++ "_to_" ++ show s 
     174mkIdAxiomName = mkAxName "identity" 
    177175 
    178176-- | Make the named sentence for the identity axiom from s to s' 
    179177--   i.e., forall x:s . inj(inj(x))=e=x 
    180178mkIdAxiom:: SORT -> SORT -> Named (FORMULA ()) 
    181 mkIdAxiom s s' = 
    182     makeNamed name 
    183         (mkForall [vx] 
    184             (mkExEq 
    185                 (injectUnique nullRange (injectUnique nullRange qualX s') s) 
    186                 qualX 
    187             ) nullRange 
    188         ) 
    189     where name = mkIdAxiomName s s' 
    190           vx = mkVarDeclStr "x" s 
    191           qualX = toQualVar vx 
     179mkIdAxiom s s' = makeNamed (mkIdAxiomName s s') 
     180    $ mkXExEq s (injectTo s . injectTo s') id 
    192181 
    193182generateAxioms :: Sign f e -> [Named (FORMULA ())] 
    194 generateAxioms sig = map (mapNamed $ renameFormula id) $ concat $ 
    195     [[mkEmbInjAxiom s s'] ++ [mkProjInjAxiom s s'] ++ [mkProjAxiom s s'] 
     183generateAxioms sig = concat 
     184    $ [[mkEmbInjAxiom s s'] ++ [mkProjInjAxiom s s'] ++ [mkProjAxiom s s'] 
    196185      | s <- sorts, 
    197186        s' <- realSupers s] 
    198    ++ [[mkTransAxiom s s' s''] 
     187    ++ [[mkTransAxiom s s' s''] 
    199188          | s <- sorts, 
    200189            s' <- realSupers s, 
    201190            s'' <- realSupers s', 
    202191            s'' /= s] 
    203    ++ [[mkIdAxiom s s'] 
     192    ++ [[mkIdAxiom s s'] 
    204193          | s <- sorts, 
    205194            s' <- realSupers s,