packages feed

ideas-0.6: src/Domain/Math/Examples/DWO1.hs

-----------------------------------------------------------------------------
-- Copyright 2010, Open Universiteit Nederland. This file is distributed 
-- under the terms of the GNU General Public License. For more information, 
-- see the file "LICENSE.txt", which is included in the distribution.
-----------------------------------------------------------------------------
-- |
-- Maintainer  :  bastiaan.heeren@ou.nl
-- Stability   :  provisional
-- Portability :  portable (depends on ghc)
--
-- Example exercises from the Digital Mathematics Environment (DWO)
--
-----------------------------------------------------------------------------
module Domain.Math.Examples.DWO1
   ( calculateResults, fillInResult
   , coverUpEquations, linearEquations
   , quadraticEquations, findFactors
   , modulusEquations, sqrtEquations, sqrtSubstEquations, brokenEquations
   , simplerSqrt, simplerSqrt2, simplerSqrt3
   ) where

import Prelude hiding ((^))
import Domain.Math.Data.Relation
import Domain.Math.Expr

calculateResults :: [[Expr]]
calculateResults = [level1, level2, level3]
 where
   level1 = 
      [ -8*(-3)
      , -3-9
      , 55/(-5)
      , -6*9
      , -11- (-3)
      , 6-(-9)
      , -10+3
      , 6+(-5)
      ]
      
   level2 = 
      [ -3-(6*(-3))
      , -12/3 - 3
      , -4*(2+3)
      , 2-6*6
      , -27/(4-(-5))
      , (-24/(-6)) - 3
      , 8-(-77/(-11))
      , 4/(-4+5)
      ]
      
   level3 = 
      [ 4*(3-(6-2))
      , (-16-9)/5 - 3
      , 4- (4-13)/(-3)
      , (3*(-3))-5-4
      , -55/(3*(-5)+4)
      , -4*(-2+ (-4)+7)
      , -8 - (140/4*5)
      , (13-(2-1)) / 3
      ]

fillInResult :: [[Equation Expr]]
fillInResult = [level1, level2, level3]
 where
   level1 = 
      let x = variable "x" in
      [ x-2    :==: 2
      , -4*x   :==: -28
      , -8*x   :==: 72
      , x+4    :==: 09
      , 4+x    :==: 2
      , -10-x  :==: -7
      , x/(-8) :==: -3
      , 11-x   :==: 14
      ]
      
   level2 = 
      let x = variable "x" in
      [ -5-3*x      :==: -23
      , 21/x - 4    :==: 3
      , -3*(x+3)    :==: -27
      , 2-5*x       :==: 47
      , 18/(7-x)    :==: 6
      , -77/x  + 4  :==: -7
      , -7-(x/(-5)) :==: -15
      , -18/(-3+x)  :==: 3
      ]

   level3 = 
      let x = variable "x" in
      [ -5*(5-(3-x))    :==: -20
      , (-20-x)/(-5)-2  :==: 3
      , 4-(x-14)/(-3)   :==: 1
      , 3*x - 3 - 7     :==: 8
      , -42/(-2*x+2)    :==: 7
      , 3*(4+x+2)       :==: 12
      , -6-(-54/(-3*x)) :==: -12
      , 14-(x-3)/4      :==: 3
      ]

coverUpEquations :: [[Equation Expr]]
coverUpEquations = [level1, level2]
 where
   level1 = 
      let x = variable "x" in
      [ 38-7*x       :==: 3
      , sqrt (125/x) :==: 5
      , 4*(12-x) + 7 :==: 35
      , 5*x^2        :==: 80 
      , 5*(5-x)      :==: 35
      , 32/sqrt x    :==: 8
      , (21/x)-8     :==: -1
      , 180/x^2      :==: 5
      , 3*(x-8)^2    :==: 12
      , (8-x)/3 + 7  :==: 9
      ]
   
   level2 = 
      let x = variable "x" in
      [ sqrt (x+9)/2       :==: 3
      , (4*x-18)^2         :==: 4
      , 3*(13-2*x)^2 - 20  :==: 55
      , 5*((x/3) - 8)^2    :==: 20
      , (6/sqrt (x-7))^3   :==: 8
      , 8-(15/sqrt (31-x))           :==: 5
      , sqrt (4*(x^2-21))            :==: 4
      , 3 + (44/sqrt (87 + x))       :==: 7
      , 13-(56 / (21 + (70/(3+x))))  :==: 12
      , 12/(2+(24/(8+(28/(2+9/x))))) :==: 3
      ]  

linearEquations :: [[Equation Expr]]
linearEquations = [level1, level2, level3, level4, level5]
 where
   level1 :: [Equation Expr]
   level1 = 
      let x = variable "x" in
      [ 5*x + 3   :==: 18
      , 11*x - 12 :==: 21
      , 19 - 3*x  :==: -5
      , -12 + 5*x :==: 33
      , 15 - 9*x  :==: 6
      , 4*x + 18  :==: 0
      , 11*x - 12 :==: -34
      , -2*x - 3  :==: -4
      , 6*x - 12  :==: 2
      , -4*x - 13 :==: -11
      ]

   level2 :: [Equation Expr]
   level2 = 
      let x = variable "x" in
      [ 6*x-2    :==: 2*x+14
      , 3+6*x    :==: 3*x+24
      , 5*x+7    :==: 2*x - 10
      , 2*x-8    :==: 18 - x
      , 4*x - 6  :==: 7*x - 14
      , -1 -5*x  :==: 3*x - 20
      , 4*x - 7  :==: -5*x - 24
      , 4*x - 18 :==: 14 + 11*x
      , 17       :==: 4 - 10*x
      , -5*x + 6 :==: 2 - 3*x
      ]

   level3 :: [Equation Expr]
   level3 = 
      let x = variable "x" in
      [ 4*(x-1)          :==: 11*x - 12
      , 4*(x-4)          :==: 5*(2*x+1)
      , 2*(5-3*x)        :==: 6-x
      , 4*x - (x-2)      :==: 12 + 5*(x-1)
      , -3*(x-2)         :==: 3*(x+4) - 7
      , 3*(4*x-1) + 3    :==: 7*x - 14
      , 4*(4*x - 1) - 2  :==: -3*x + 3*(2*x -5)
      , 2*x - (3*x + 5)  :==: 10 + 5*(x-1)
      , -5*(x+1)         :==: 9*(x+4)-5
      , 18 - 2*(4*x + 2) :==: 7*x - 4*(4*x -2)
      ]

   level4 :: [Equation Expr]
   level4 = 
      let x = variable "x" in
      [ (1/2)*x - 4            :==: 2*x + 2+(1/2)
      , (1/4)*x + (1/2)        :==: (5/2)*x + 2
      , (1/4)*x - (3/4)        :==: 2*x + (1/2)
      , -(1/2)*x + (3/4)       :==: (5/2)*x + 3
      , -(1/2)*x + 1+(1/2)     :==: 2*x - 5
      , -(1/3)*x + (3/4)       :==: (1/4)*x + (1/6)
      , (3/4)*x - (1/3)        :==: (2/3)*x - (3/4)
      , (2/5)*x - (1/4)        :==: (1/2)*x + (3/4)
      , (2/3)*x - 2            :==: (1/5)*x - (3/5)
      , (-1+(2/5))*x + 3+(1/2) :==: (3/5)*x + (9/10)
      ]

   level5 :: [Equation Expr]
   level5 = 
      let x = variable "x" in
      [ (1/4)*(x-3)         :==: (1/2)*x - 4
      , (x+3)/2             :==: 5*((1/2)*x + 1 + (1/2))
      , (1/2)*(7-(2/3)*x)   :==: 2 + (1/9)*x
      , (3/4)*x - (x-1)     :==: 3 + (2+(1/2))*(x-1)
      , -(5/4)*(x-7)        :==: (3/4)*(x+2) - (4+(1/2))
      , 3*((1/5)*x - 1) + 5 :==: 7*x - 14
      , ((5*x - 1) / 6) - 2 :==: -4*x + (3*x - 6)/2
      , 2*x - ((2*x+2)/5)   :==: 12 + (x-1)/6
      , (-3*(x+2))/6        :==: 9*((2/3)*x + (1/3)) - (5/3)
      , 1 - ((4*x + 2)/3)   :==: 3*x - ((5*x - 1) / 4)
      ]

quadraticEquations :: [[Equation Expr]]
quadraticEquations = [level1, level2, level3, level4, level5, level6]
 where
   level1 = 
      let x = variable "x" in
      [ x^2            :==: 2
      , x^2+3          :==: 52
      , x^2-7          :==: 0
      , 9*x^2 - 6      :==: 75
      , 32 - 2*x^2     :==: 14
      , 2*(x^2 - 3)    :==: 12
      , (1/4)*x^2 + 12 :==: 16
      , (x-1)^2        :==: 100
      , 14 - 2*x^2     :==: 6
      , (1/4)*(17-x^2) :==: 2
      ] 
   
   level2 = 
      let x = variable "x" in
      [ (x-7)^2 + 3      :==: 11
      , (6-2*x)^2        :==: 81 
      , (1/2)*(x+9)^2    :==: 4
      , (3-x^2)/10       :==: 2
      , 5*x^2 + 3*x      :==: 3*x + 2
      , 11 - (2*x + 1)^2 :==: 5
      , (6*x - 3)^2 + 6  :==: 12
      , (7+2*x)^2        :==: 7
      , 4 - (x^2 / 10)   :==: 6
      , 12 - (2*x + 3)^2 :==: 6
      ]
   
   level3 = 
      let x = variable "x" in
      [ x^2 :==: 5*x
      , x^2 - 6*x     :==: 0
      , 6*x + x^2     :==: 0
      , x*(x+4)       :==: 0
      , x*(2*x-4)     :==: 0
      , 3*x^2         :==: 6*x
      , 3*x           :==: 2*x^2
      , x*(1-6*x)     :==: 0
      , (x+5)*(x-8)   :==: 0
      , (3*x-1)*(x+3) :==: 0
      ]
      
   level4 = 
      let x = variable "x" in
      [ x^2-2*x     :==: 3
      , x^2+12*x+20 :==: 0
      , x^2-x       :==: 30
      , x*(x+2)     :==: 8
      , x*(x-3)     :==: 4
      , 2*x+15      :==: x^2
      , 4*x         :==: 12 - x^2
      , x^2         :==: 15 - 8*x
      , x^2-9*x+18  :==: 0
      , x^2+14*x+24 :==: 0
      ]
      
   level5 = 
      let x = variable "x" in
      [ (3*x+5)^2+(x-5)^2 :==: 40 
      , 4*(10-x^2)        :==: -2*x*(2*x + 10)
      , x*(x+12)          :==: 2*x^2
      , 3*(x-2)*(x+6)     :==: 12*x
      , 8*x^2+4*x-24      :==: (x+3)*(x-8)
      , 3*x^2 - 11        :==: (3+2*x)^2
      , 2*x*(x-3)-3       :==: (x+2)*(x+6)
      , 12*(x^2-3*x)+8    :==: 56
      , 4*x^2-6*x         :==: x^2+9
      , (x+1)*(x-5)       :==: (x-2)*(x-3)
      ]
   
   level6 = 
      let x = variable "x" in
      [ x^2+4*x-4   :==: 0
      , x^2-6*x     :==: 4
      , x^2-12*x+34 :==: 0
      , 2*x^2+4*x-8 :==: 0
      , (x-4)*(x-1) :==: 11
      , (x-(7/2))^2 :==: 2*(x+4)
      , x^2-3*x     :==: 3*(x-2)
      , (4-x)*(1-x) :==: 3*x
      , 2*x^2       :==: x*(x+2)+7
      , (1-x)^2     :==: x+2
      ]

-- Ontbinden in factoren (VWO B, hoofdstuk 1)
findFactors :: [[Expr]]
findFactors =
   let x = variable "x" in
   [ -- (buiten haakjes brengen)
     [ 4*x^2 -4*x
     , 36*x^2+30*x
     , -6*x^2-18*x
     , 14*x^2-10*x
     ] --(product-som methode)
   , [ x^2+11*x+24
     , x^2-8*x+15
     , x^2-x-2
     , x^2-11*x+28
     ]
   ]

modulusEquations :: [[Equation Expr]]
modulusEquations = 
   let x = variable "x" in
   [ [ abs (2*x + 3)  :==: 2 
     , abs (5 - 2*x)  :==: 1
     , abs (4*x + 7)  :==: 3
     , abs (11 - 3*x) :==: 15
     ]
   , [ abs (x^2 + 3) :==: 9
     , abs (x^2 - 7) :==: 2
     , abs (3-x^2)   :==: 6
     , abs (9-x^2)   :==: 7
     ]
   , [ abs (2*x^2+3)     :==: 19
     , abs (3*x^2-2)     :==: 1
     , abs (6-2*x^2)     :==: 2
     , abs (3-(1/2)*x^2) :==: 15
     ]
   , [ abs (4*x^3-72)       :==: 36
     , abs (0.2*x^4 - 112)  :==: 13
     , abs (2*x^4-4.25)     :==: 3.75
     , abs (1.75 - 0.5*x^3) :==: 2.25
     ]
   ]

sqrtEquations :: [[Equation Expr]]
sqrtEquations = 
   let x = variable "x" in
   [ [ 5 - 2*sqrt x   :==: 1
     , 7 - 3 * sqrt x :==: 5
     , 4 - 2*sqrt x   :==: -3
     , 6 - 3*sqrt x   :==: 2
     ]
   , [ 2*sqrt x       :==: x
     , 2*sqrt x       :==: 3*x
     , x-3*sqrt x     :==: 0
     , 3*x - 5*sqrt x :==: 0
     ]
   , [ x :==: sqrt (2*x + 3)
     , x :==: sqrt (3*x+10)
     , x :==: sqrt (4*x + 21)
     , x :==: sqrt (3*x + 4)
     ]
   , [ 5*x :==: sqrt (50*x + 75)
     , 2*x :==: sqrt (24*x + 28)
     , 3*x :==: sqrt (27*x - 18)
     , 2*x :==: sqrt (28*x - 40)
     , 3*x :==: sqrt (3*x + 42)
     , 5*x :==: sqrt (49*x + 2)
     , 3*x :==: sqrt (10*x -1)
     , 5*x :==: sqrt (30*x - 5)
     ]
   , [ x - sqrt x     :==: 6
     , x - 4*sqrt x   :==: 12
     , x - sqrt x     :==: 12
     , x - sqrt x     :==: 2
     , 2*x + sqrt x   :==: 3
     , 3*x + 4*sqrt x :==: 20
     , 2*x + sqrt x   :==: 15
     , 2*x - 3*sqrt x :==: 27 
     ]
   ]
   
sqrtSubstEquations :: [[Equation Expr]]
sqrtSubstEquations = 
   let x = variable "x" in
   [ [ 8*x^3 + 1 :==: 9*x * sqrt x
     , 27*x^3    :==: 28*x*sqrt x - 1
     , x^3 + 3   :==: 4*x*sqrt x
     , x^3       :==: 10*x*sqrt x - 16
     ]
   , [ x^3               :==: 6*x*sqrt x + 16
     , x^3 - 24*x*sqrt x :==: 81
     , x^3 + x*sqrt x    :==: 20
     , x^3 - 15          :==: 2*x*sqrt x
     ]
   , [ x^5 +32                      :==: 33*x^2*sqrt x
     , 243*x^5 - 244*x^2*sqrt x + 1 :==: 0
     , 32*x^5 + 31*x^2*sqrt x       :==: 1
     , x^5                          :==: 242*x^2*sqrt x + 243
     ]
   , [ x^5 + 8              :==: 6*x^2*sqrt x
     , x^5                  :==: 9*x^2 * sqrt x - 18
     , x^5                  :==: 5*x^2*sqrt x + 24
     , x^5 + 4*x^2 * sqrt x :==: 12
     ]
   ]
   
brokenEquations :: [[Equation Expr]]
brokenEquations = 
   let x = variable "x" in
   [ [ (2*x^2 - 10) / (x^2+3) :==: 0 
     , (7*x^2 - 21) / (2*x^2 - 5) :==: 0
     , (3*x^2 - 6) / (4*x^2+1) :==: 0
     , (4*x^2 - 24) / (6*x^2 - 2) :==: 0
     , x^2 / (x+4) :==: (3*x+4) / (x+4)
     , (x^2 + 2) / (x-2) :==: (x+8) / (x-2)
     , (x^2 + 6*x - 6) / (x^2 - 1) :==: (4*x + 9) / (x^2 - 1)
     , (x^2 + 6) / (x^2 - 2) :==: (7*x) / (x^2 - 2)
     ]
   , [ (x^2 + 6*x) / (x^2 - 1) :==: (3*x + 4) / (x^2 - 1)
     , (x^2 + 6) / (x - 3) :==: (5*x) / (x - 3)
     , (x^2 + 4*x) / (x^2 - 4) :==: (3*x + 6) / (x^2 - 4)
     , (x^2 + 2*x - 4) / (x-5) :==: (4*x + 11) / (x - 5)
     , (5*x+2) / (2*x - 1) :==: (5*x + 2) / (3*x + 5)
     , (x^2-9) / (4*x - 1) :==: (x^2 - 9) / (2*x + 7)
     , (3*x - 2) / (2*x^2) :==: (3*x - 2) / (x^2 + 4)
     , (2*x + 1) / (x^2+3*x) :==: (2*x + 1) / (5*x + 8)
     ]
   , [ (x^2 - 1) / (2*x + 2) :==: (x^2-1) / (x+8)
     , (x^2 - 4) / (3*x - 6) :==: (x^2-4) / (2*x+1)
     , (x^2 + 5*x) / (2*x^2) :==: (x^2 + 5*x) / (x^2 + 4)
     , (x^2 - 3*x) / (2*x - 6) :==: (x^2 - 3*x) / (4*x + 2)
     , x/(x+1) :==: 1+3/4
     , (x+2)/(3*x) :==: 1+1/3
     , (2*x+3) / (x-1) :==: 3+1/2
     , (x-3)/(1-x) :==: 1+2/5
     ]
   , [ (x+4)/(x+3) :==: (x+1)/(x+2)
     , (2*x+3)/(x-1) :==: (2*x-1) / (x-2)
     , (3*x+6)/(3*x-1) :==: (x+4) / (x+1)
     , (x+2)/(2*x+5) :==: (x+4)/(2*x-3)
     , (x+5)/(2*x) +2 :==: 5
     , (3*x+4)/(x+2) - 3 :==: 2
     , (x^2)/(5*x+6) +4 :==: 5
     , (x^2)/(2*x-3) + 3 :==: 7
     ]
   , [ (x-2) / (x-3) :==: x/2
     , (x+9) / (x-5) :==: 2/x
     , (x+2) / (x+4) :==: 2/(x+1)
     , (-3) / (x-5) :==: (x+3)/(x-1)
     , (x+1)/(x+2) :==: (7*x+1) / (2*x-4)
     , (2*x-7)/(5-x) :==: (x+1) / (3*x-7)
     , (x+1)/(x-1) :==: (3*x-7)/(x-2)
     , (3*x-7)/(x-2) :==: (7-x) / (3*x-3)
     ]
   ]
   
infix 9 *|

-- short-hand notation for a product with a square-root
(*|) :: Expr -> Expr -> Expr
a *| b = a * sqrt b

simplerSqrt :: [[Expr]]
simplerSqrt = 
   let a = Var "a" in
   [ [ 9*|5 * 7*|3, 3*|2 * 2*|5, 5*|2 * 6*|7, 4*|6 * 2*|7, (6*a)*|3 * 9*|2
     , 5*|5 * (2*a)*|7, a*|6 * 7*|5, 8*|7 * a*|3
     ]
   , [ sqrt 15 / 6*|3, 5*|30/sqrt 5, 4*|10 / 5*|2, 5*|21 / 2*|7, (6*a)*|35 / 3*|5
     , (5*a)*|14 / 9*|2, a*|6 / 7*|3, (a*3)*|42 / 7*|7
     ]
   , [ 5/2*|2, 2/5*|3, 3/2*|5, 8/7*|6, (2*a)/3*|7, (6*a)/7*|10, (5*a)/3*|11
     , (6*a)/5*|13
     ]
   , [ sqrt (2/3), sqrt (5+1/3), sqrt (1+1/2), sqrt (3+4/7), sqrt (5*a^2)
     , sqrt (7*a^2), sqrt (3*a^2), sqrt (6*a^2)
     ]
   , [ sqrt ((2/9)*a^2), sqrt ((5/16)*a^2), sqrt ((3/25)*a^2), sqrt ((7/16)*a^2)
     , ((1/3)*|2)^2, ((1/2)*|3)^2, ((2/7)*|5)^2, ((2/3)*|7)^2
     ]
   ]
   
simplerSqrt2 :: [[Expr]]
simplerSqrt2 = 
   let a = Var "a" in
   [ [ (((1/7)*a)*|2)^2, (((3/5)*a)*|3)^2, (((1/3)*a)*|5)^2, (((4/7)*a)*|6)^2
     , sqrt 8 + sqrt 2, sqrt 2 + sqrt 18, sqrt 12 - sqrt 3, sqrt 7 - sqrt 28
     ]
   , [ sqrt 12 + sqrt 48, sqrt 18 - sqrt 8, sqrt 45 - sqrt 20, sqrt 80 + sqrt 45
     , sqrt (50*a^2) - sqrt (32*a^2), sqrt (75*a^2) - sqrt (12*a^2)
     , sqrt (27*a^2) + sqrt (3*a^2), sqrt (24*a^2) + sqrt (96*a^2)
     ]
   , [ sqrt 27 + 1 / sqrt 3, sqrt 24 + 5/sqrt 6, sqrt 72- 7/ sqrt 2
     , sqrt 98 - 5/sqrt 2, sqrt 24 + sqrt (1+1/2), sqrt 40 - sqrt (2+1/2)
     , sqrt 75 - sqrt (1+1/3)
     , sqrt (1+2/3) + sqrt 60
     ] 
   ]
   
simplerSqrt3 :: [[Expr]]
simplerSqrt3 = 
   let a = Var "a" in
   [ [ (2*|7 + 7*|3)^2, (sqrt 2 + 6*|3)^2, (4*|3 + 3*|2)^2, (2*|5 + sqrt 7)^2
     , (3*|6 - 4*|5)^2, (5*|3 - sqrt 2)^2, (4*|6 - 2*|7)^2, (sqrt 5 - 2*|3)^2
     ]
   , [ (2*|3 - 2)^2, (5*|2 - 1)^2, (3+4*|3)^2, (2+3*|6)^2, (4*|2+3)*(4*|2 - 3)
     , (sqrt 7 + sqrt 3)*(sqrt 7 - sqrt 3), (2*|2 - sqrt 5)*(2*|2 + sqrt 5)
     , (6-3*|3)*(6+3*|3)
     ]
   , [ (a-sqrt 3)^2,  (2*|6 + a)^2, (2*a + a*|5)^2, (a*|3 - (2*a)*|2)^2
     , (a-sqrt 7)*(a+sqrt 7), (3*a + 2*|3)*(3*a - 2*|3)
     , (2*a + a*|2)*(2*a - a*|2), ((3*a)*|5 - a)*((3*a)*|5 + a)
     ]
   , [ 4/(sqrt 2 + 2), 3/(sqrt 5 + 1), 2/(sqrt 3 - 3), 5/(sqrt 6 - 2)
     , 6/(sqrt 7 + sqrt 5), 4/(2*|3 + sqrt 6), 5/(3*|2 - sqrt 3)
     , 2/(sqrt 11-sqrt 2)
     ]
   , [ 2*|3 / (sqrt 5 + sqrt 2), 6*|5 / (sqrt 7 + sqrt 3)
     , 4*|3 / (sqrt 5 - sqrt 3), 8*|7 / (sqrt 6 - sqrt 5)
     ]
   ]