Data expresion = Valex Integer | Sum Espresion Expresion | mult Expresion Expresion
evaluar :: Expresion -> Integer
evaluar Valex n = n
evaluar Mult x y = evaluar x * evaluar y
evaluar Sum x y = evaluar x + evaluar y
iguales :: Expresion -> Expresion -> Bool
iguales (Valex n) (Valex m) = n == m
iguales (Sum x y) (Sum a b) = iguales x a && iguales y b
iguales (Mult x y) Mult (a b) = iguales x a && iguales y b
iguales | otherwise = false
subexpresion :: Expresion -> exppresion -> Bool
subexpresion x Valex a = iguales x Valex a
subexpresion (Sum a b) (Sum x y) = iguales a x && iguales b y || subexpresion (Sum a b) x || subexpresion (Sum a b) y
subexpresion (Mult a b) (Mult x y) = iguales x a && iguales b y || subexpresion (Mult a b) x || subexpresion (Mult a b) y
subexpresion (Sum a b) (Mult x y) = subexpresion (Sum a b) x || subexpresion (Sum a b) x
subexpresion (Mult a b) (Sum x y ) = subexpresion (Mult a b) x || subexpresion (Sum a b) y