-- addDef :: Def
-- addDef =
--     Def "add" ["a", "b", "q113"] (
--       ((V "a" === C "o" []) &&&
--       (V "b" === V "q113")) |||
--       (fresh ["x"] (
--         (V "a" === C "s" [V "x"]) &&&
--         (call "add" [V "x", C "s" [V "b"], V "q113"])))
--     )

addDef :: Def
addDef =
    ( Def "add" ["x", "y", "z"]
        (
          x === C "o" []  &&& z === y |||
          fresh ["x'", "z'"]
            (x === C "s" [x'] &&& z === C "s" [z'] &&& call "add" [x', y, z'])
        )
    )
  where
    [x, y, z, x', z'] = map V ["x", "y", "z", "x'", "z'"]
addDef :: Def
addDef =
    ( Def "add" ["x", "y", "z"]
        (
          x === C "o" []  &&& z === y |||
          fresh ["x'", "z'"]
            (x === C "s" [x'] &&& z === C "s" [z'] &&& call "add" [x', y, z'])
        )
    )
  where
    [x, y, z, x', z'] = map V ["x", "y", "z", "x'", "z'"]
addDef =
    ( Def "add" ["x", "y", "z"]
        (
          x === C "o" []  &&& z === y |||
          fresh ["x'", "z'"]
            (x === C "s" [x'] &&& z === C "s" [z'] &&& call "add" [x', y, z'])
        )
    )
  where
    [x, y, z, x', z'] = map V ["x", "y", "z", "x'", "z'"]