{VERSION 3 0 "IBM INTEL NT" "3.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 }{CSTYLE "" 0 21 "" 0 1 0 0 0 1 0 0 0 0 2 0 0 0 0 }{CSTYLE " " -1 256 "" 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 257 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 258 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 260 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 261 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 262 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 263 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 264 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 265 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 266 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 267 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 268 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 269 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 270 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 271 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 272 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 273 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 274 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 275 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 276 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 277 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 278 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 279 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 280 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 281 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 282 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 283 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 284 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 285 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 286 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 287 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 288 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 289 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 290 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 291 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 292 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 293 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 294 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 295 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 296 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 297 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 298 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 299 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 300 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 301 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 302 "" 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 }{CSTYLE "" -1 303 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 304 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 305 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 306 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 307 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 308 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 309 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 310 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 311 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 312 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 313 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 314 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 315 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 316 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{CSTYLE "" -1 317 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Helve tica" 0 10 0 0 0 1 2 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 Font 0" -1 256 1 {CSTYLE "" -1 -1 "Helvetica" 0 10 0 0 255 1 2 1 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "R3 \+ Font 2" -1 257 1 {CSTYLE "" -1 -1 "" 0 10 255 0 0 1 2 2 2 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 258 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 259 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 260 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 261 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 262 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 263 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 264 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 265 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 266 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 267 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 268 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 269 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 270 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 271 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 272 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 273 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 274 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 275 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 276 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 277 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 278 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 279 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 280 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 281 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 282 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 283 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 284 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 285 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 286 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 287 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 288 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 289 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 290 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 291 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 292 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 293 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 294 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 295 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 296 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 297 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 298 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 299 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 300 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 301 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 302 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 303 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 304 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 305 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 306 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 307 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 308 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 309 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 310 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 311 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 312 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 313 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 314 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 315 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 316 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 317 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 318 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 319 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 320 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 321 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 322 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 323 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 324 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 325 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 326 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 327 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 328 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 329 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 330 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 331 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 332 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 333 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 334 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 335 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 336 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 337 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 338 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 339 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 340 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 341 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 342 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 343 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 344 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 345 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 346 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 347 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 348 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 349 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 350 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 351 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 352 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 353 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 354 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 355 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 356 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 357 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 358 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 359 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 360 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 361 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 362 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 363 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 364 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 365 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 366 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 367 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 368 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 369 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 370 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 371 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 372 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 373 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 374 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 375 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 376 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 377 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 378 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 379 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 380 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 381 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 382 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 383 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 384 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 385 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 386 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 387 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 388 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 389 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 390 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 391 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 392 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 393 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 394 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 395 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 396 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 397 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 398 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 399 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 400 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 401 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 402 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 403 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 404 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 405 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 406 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 407 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 408 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 409 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 410 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 411 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 412 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 413 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 414 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 415 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 416 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 417 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 418 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 419 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 420 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 421 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 422 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 423 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 424 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 425 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 426 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 427 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 428 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 429 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 430 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 431 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 432 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 433 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 434 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 435 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 436 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 437 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 438 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 439 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 440 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 441 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 442 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 443 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 444 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 445 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 446 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 447 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 448 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 449 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 450 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 451 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 452 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 453 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 454 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 455 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 456 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 457 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 458 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 459 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 460 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 461 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 462 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 463 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 464 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 465 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 466 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 467 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 468 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 469 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 470 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 471 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 472 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 473 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 474 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 475 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 476 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 477 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 478 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 479 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 480 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 481 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 482 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 483 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 484 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 485 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 486 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 487 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 488 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 489 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 490 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 491 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 492 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 493 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 494 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 495 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 496 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 497 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 498 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 499 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 500 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 501 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 502 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 503 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 504 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 505 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 506 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 507 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 508 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 509 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 510 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 511 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 512 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 513 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 514 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 515 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 516 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 517 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 518 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 519 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 520 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 521 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 522 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 523 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 524 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 525 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 526 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 527 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 528 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 529 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 530 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 531 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 532 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 533 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 534 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 535 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 536 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 537 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 538 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 539 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 540 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 541 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 542 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 543 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 544 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 545 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 546 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 547 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 548 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 549 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 550 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 551 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 552 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 553 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 554 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 555 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 556 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 557 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 558 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 559 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 560 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 561 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 562 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 563 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 564 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 565 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 566 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 567 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 568 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 569 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 570 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 571 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 572 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 573 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 574 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 575 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 576 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 577 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 578 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 579 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 580 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 581 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 582 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 583 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 584 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 585 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 586 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 587 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 588 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 589 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 590 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 591 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 592 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 593 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 594 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 595 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 596 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 597 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 598 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 599 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "" 0 600 1 {CSTYLE "" -1 -1 " " 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 }0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 } {PSTYLE "" 0 601 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 2 0 0 0 0 0 0 0 } 0 0 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }} {SECT 0 {EXCHG {PARA 561 "" 0 "" {TEXT -1 22 "This is clifford9M.mws" }}{PARA 562 "" 0 "" {TEXT -1 0 "" }}{PARA 563 "" 0 "" {TEXT -1 61 "(Cr eated: December 6, 1999)\n(Last revised: December 27, 2001)" }}{PARA 564 "" 0 "" {TEXT -1 0 "" }}{PARA 565 "" 0 "" {TEXT -1 468 "This is a \+ listing (without examples) of all procedures in a Maple package calle d 'CLIFFORD' (Version 5, Copyright 1995-2002 by Rafal Ablamowicz, Ten nessee Technological University), and Bertfried Fauser, Universit\"at Konstanz, for Maple V Rel 5.1. \n\nNote that this final version of 'C LIFFORD' for Maple V Rel. 5.1 is called 'Cliff5' to match the version \+ number with the Maple version.\n\nUser will know which version he/she \+ is using by using the 'version()' function." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 311 55 "The following procedures can u se index such as K or -K:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 " " 0 "" {TEXT -1 66 "cmul[K](p1,p2,...,pn); ##Clifford product of p1,p2 ,...,pn in Cl(K)" }}{PARA 0 "" 0 "" {TEXT -1 81 "&c[K](p1,p2,...,pn); \+ ##Clifford product of p1,p2,...,pn in Cl(K) (ampersand form)" }}{PARA 0 "" 0 "" {TEXT -1 112 "cmulQ[K](p1,p2,...,pn); ##Clifford product of \+ p1,p2,...,pn in Cl(K) (here K is expected to be a diagonal matrix)" }} {PARA 0 "" 0 "" {TEXT -1 126 "&cQ[K](p1,p2,...,pn); ##Clifford product of p1,p2,...,pn in Cl(K) (here K is expected to be a diagonal matrix) , ampersand form" }}{PARA 0 "" 0 "" {TEXT -1 56 "cexp[K](p,N); ## expo nential of p in Cl(K) up to order N" }}{PARA 0 "" 0 "" {TEXT -1 102 "c expQ[K](p,N); ## exponential of p in Cl(K) up to order N (here K is ex pected to be a diagonal matrix)" }}{PARA 0 "" 0 "" {TEXT -1 53 "climin poly[K](p); ## minimal polynomial of p in Cl(K)" }}{PARA 0 "" 0 "" {TEXT -1 91 "sexp[K](p,N); ## exponential of p in Cl(K) up to order N \+ modulo the minimal polynomial of p" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "" 0 "" {TEXT 312 96 "The following procedures can use name K \+ or a numeric multiple of a name as an optional argument:" }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT -1 106 "LC(p1,p2,K); ##le ft contraction of p2 by p1 w.r.t. K\nRC(p1,p2,K); ##right contraction \+ of p1 by p2 w.r.t. K" }}{PARA 0 "" 0 "" {TEXT -1 68 "cmulNUM(m1,m2,K); ##Clifford (numeric) product of m1 and m2 in Cl(K)" }}{PARA 0 "" 0 " " {TEXT -1 41 "reversion(p,K); ##reversion of p in Cl(K)" }}{PARA 0 " " 0 "" {TEXT -1 43 "cinv(p,K); ##Clifford inverse of p in Cl(K)" }} {PARA 0 "" 0 "" {TEXT -1 73 "LCQ(p1,p2,K); ##left contraction of p2 by p1 w.r.t. diagonal entries in K" }}{PARA 0 "" 0 "" {TEXT -1 74 "RCQ(p 1,p2,K); ##right contraction of p1 by p2 w.r.t. diagonal entries in K " }}{PARA 0 "" 0 "" {TEXT -1 46 "conjugation(p,K); ## conjugation of p in Cl(K)" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 313 86 "The folllowing procedures can pass on name or a numeric multip le of a name via a list:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 " " 0 "" {TEXT -1 121 "type([p,K],nilpotent); ## checks if p is nilpoten t in Cl(K)\ntype([p,K],idempotent); ## checks if p is idempotent in Cl (K)" }}{PARA 599 "" 0 "" {TEXT -1 0 "" }}{PARA 598 "" 0 "" {TEXT -1 580 "\nProcedures that define types: `type/climon`, `type/clipolynom`, `type/climatrix` as well as other procedures such as 'reorder', 'wedg e', etc., have been substantially revised to improve efficiency and sp eed of the package. This work has been done together with Bertfried Fa user, Universit\"at Konstanz, in Cookeville on October 5, 2001. \n\nTh is version includes \"Bigebra\" package that has been created together with Bertfried Fauser, Universit\"at Konstanz, Konstanz, Germany. Add itional help pages have been written and added to the database that ex plain the usage of this package." }{TEXT 287 0 "" }}{PARA 566 "" 0 "" {TEXT -1 0 "" }}{PARA 567 "" 0 "" {TEXT -1 150 "An additional feature \+ in this version is an ability to display and change environmental vari ables. They can be displayed with procedure CLIFFORD_ENV.\n" }}{PARA 596 "" 0 "" {TEXT -1 407 "NOTE: Big change from version 4 is that now \+ types 'clibasmon', 'climon', and 'clipolynom' are all exclusive wherea s in version 4 they were inclusive, that is, `type/clipolynom` include d `type/climon` which in turn included `type/clibasmon`. \n\nThis pack age is made to run under Maple V Rel. 5 or 5.1. It is available on a \+ server of the Department of Mathematics, Tennessee Technological Uni versity, at: \n" }}{PARA 568 "" 0 "" {TEXT -1 67 " \+ http://math.tntech.edu/rafal/cliff5/ " }}{PARA 569 "" 0 "" {TEXT -1 0 "" }}{PARA 570 "" 0 "" {TEXT -1 128 "In order to create a M aple file 'Cliff5.m' containing the 'CLIFFORD' package, execute this w orksheet.\n\nTo load the package type:" }}{PARA 571 "" 0 "" {TEXT -1 0 "" }}{PARA 572 "" 0 "" {TEXT -1 15 ">with(Cliff5); " }}{PARA 573 "" 0 "" {TEXT -1 0 "" }}{PARA 574 "" 0 "" {TEXT -1 189 "You will know if \+ the package has been loaded because a list with Clifford procedures wi ll be displayed on the screen. To check the current version of the pa ckage, at the Maple prompt type " }}{PARA 575 "" 0 "" {TEXT -1 0 "" }} {PARA 576 "" 0 "" {TEXT -1 12 ">version( );" }}{PARA 577 "" 0 "" {TEXT -1 0 "" }}{PARA 578 "" 0 "" {TEXT -1 35 "Rafal Ablamowicz, Ph.D. and Chair " }}{PARA 579 "" 0 "" {TEXT -1 35 "Department of Mathemati cs, Box 5054" }}{PARA 580 "" 0 "" {TEXT -1 36 "Tennessee Technological University " }}{PARA 581 "" 0 "" {TEXT -1 21 "Cookeville, TN 38505 \+ " }}{PARA 582 "" 0 "" {TEXT -1 24 "rablamowicz@tntech.edu " }}{PARA 583 "" 0 "" {TEXT -1 25 "phone: USA (931) 372-3569" }}{PARA 584 "" 0 " " {TEXT -1 23 "fax: USA (931) 372-6353" }}{PARA 585 "" 0 "" {TEXT -1 30 "\nCookeville, December 23, 2001" }}{PARA 0 "" 0 "" {TEXT -1 0 "" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 9 "restart:\n" }}{PARA 586 "" 0 "" {TEXT -1 84 "No. 1. Name 'version' stores information about the curren t version of the package. " }}{PARA 587 "" 0 "" {TEXT -1 0 "" }} {PARA 588 "" 0 "" {TEXT -1 25 "Typical use: version(); " }}{PARA 0 " " 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1484 "Cliff5[ver sion]:= proc()\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz a nd Bertfried Fauser. All rights reserved.`;\nprint(`++++++++++++++++++ +++++++++++++++++++++++++`);\nprint(`CLIFFORD - A Maple V (R. 5.1) Pac kage for Clifford Algebras`); \nprint(`(Version 5 with global variable _prolevel and \"Bigebra\" package)`);\nprint(`(\"Bigebra\" package wr itten with Bertfried Fauser, Universit\"at Konstanz)`);\nprint(`Last r evised: December 23, 2001 (Source file: clifford9M.mws)`);\nprint(`Cop yright 1995-2002 by Rafal Ablamowicz (*) and Bertfried Fauser ($)`);\n print(``);\nprint(`(*) Department of Mathematics, Box 5054`);\nprint(` Tennessee Technological University, Cookeville, TN 38505`);\nprint (` tel: USA (931) 372-3569, fax: USA (931) 372-6353`);\nprint(` \+ rablamowicz@tntech.edu`);\nprint(` http://math.tntech.edu/rafal/Cli ff5/`);\nprint(`($) Universit\"at Konstanz, Fachbereich Physik, Fach M 678`);\nprint(` 78457 Konstanz, Germany`);\nprint(` Bertfried.Fa user@uni-konstanz.de`);\nprint(` http://kaluza.physik.uni-konstanz. de/~fauser/`); \nprint(``);\nprint(`If you are a Clifford algebra pro, assign 'true' to '_prolevel' and see`);\nprint(`how much faster \+ your computations will be! But watch your syntax!`);\nprint(`Use 'usep roduct' to change value of _default_Clifford_product in Cl(B) from`); \nprint(`cmulRS when B is symbolic to cmulNUM when B is numeric. Type \+ ?cmul for help.`); \nprint(`++++++++This is CLIFFORD version 5, librar y file : Cliff5.m++++++++`);\nend:\n" }}{PARA 556 "" 0 "" {TEXT -1 929 "No. 2. Procedure 'specify_constants' allows user to specify any n ew symbolic constants, e.g., a, b, c, B, e.t.c, which are to be known to Maple. The originally known constants are stored in a global, non -protected variable 'constants' and must be saved separately, if neede d. This procedure is needed when sorting or collecting multivariate C lifford polynomials containing expressions like 'aa*eiwej' in which 'a a' is intended to be a constant and 'eiwej' is intended to be a Cliffo rd basis monomial with indices i and j. Before using Clifford[clisort ] or Clifford[clicollect] user should make any additional constants of length 2 or more known to Maple as shown below. If these constants o f length 2 or more are not defined as Maple constants, then some proce dures might yield error messages (although an attempt has been made to avoid this problem). Constants of length one are automatically assume d to be Maple constants." }}{PARA 557 "" 0 "" {TEXT -1 0 "" }}{PARA 558 "" 0 "" {TEXT -1 46 "Typical use: specify_constants(a, b, B, aa); \+ " }}{PARA 559 "" 0 "" {TEXT -1 0 "" }}{PARA 560 "" 0 "" {TEXT -1 186 "NOTE: from now on, extra spaces have been added for the Reader's conv enience in the sequence of input variables as in the above example. Th ese spaces are not needed or required by Maple." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 308 "Cliff5[specify_con stants]:=proc(a1::anything) global constants;\noptions `Copyright (c) \+ 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserve d.`;\n#verified with maplemint\nconstants:=op(\{constants,a1\}); #rem ove duplicates\nRETURN(`Maple now knows the following constant(s): `,c onstants);\nend:\n" }}{PARA 555 "" 0 "" {TEXT -1 819 "No. 3. The proce dure 'cbasis' writes a canonical basis for a Clifford algebra Cl(B) ov er a vector space V endowed with a bilinear form B. The dimension of \+ V is specified by a Maple global variable 'dim' where 1 <= dim <= 9. \+ This procedure can be used with one or two arguments as, for example, \+ in cbasis(4) or cbasis(4, 2). In the first case, it returns a list of all basis elements in the Clifford algebra Cl(4). In the second case, it returns a list of basis elements in the 2-vector subspace of Cl(4) . Below, 'Id' stands for the algebra unit element and 'w' denotes wedg e/exterior product in the Clifford algebra. An option 'even' allows on e to create a basis in the even subalgebra of the given Clifford algeb ra as in cbasis(3, 'even'). In fact, 'even' can be replaced with any \+ name which evaluates to a string." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 1356 "Cliff5[cbasis]:=proc(a1::nonnegin t,a2::\{string,symbol,nonnegint\})\nlocal i,k,X,XX,YY,L,Leven,bas,nxt, ind,start;\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and B ertfried Fauser. All rights reserved.`, remember;\n#verified with mapl emint\nif a1>9 then ERROR(\"the argument has to be between 0 and 9 inc lusive\") fi;\nif a1=0 then RETURN([Id]) fi;\nif nargs=2 and type(a2, \{string,symbol\}) then do\nL:=Cliff5[cbasis](a1):\nLeven:=[Id]:\nif n ops(L) > 1 then\nfor i from 2 to nops(L) do\nif type(length(L[i]),odd) then Leven:=[op(Leven),L[i]] fi od fi; \n RETURN(Leven) od fi;\nfor k from 0 to a1 do X[k]:=combinat[choose]([seq(i,i=1..a1)],k) od;\nif \+ not nargs = 1 and not nargs = 2 then \n ERROR(\"one or two positive \+ integers needed as input\")\nelif nargs = 1 then XX:=[seq(op(X[k]),k=0 ..a1)] \nelse if not a2 >= 0 or not a2 <= a1 then \n ERROR(\"ar gument 2 must satisfy: 0 <= argument 2 <= argument 1\") \n else XX:=X[a2] \nfi fi;\nYY:=array(1..nops(XX),[]);start:=1:\nif XX[1] = [ ] then YY[1]:=Id; start:=2 fi;\nfor k from start to nops(XX) do\nind:= XX[k][1];if ind=10 then bas:=e.0 else bas:=e.ind fi;\nfor i from 2 to \+ nops(XX[k]) do ind:=XX[k][i]:\nif ind=10 then nxt:=e.0 else nxt:=e.ind fi:\n bas:=cat(bas,\"w\",nxt): od;\nYY[k]:=bas;od:\nYY:=convert (YY,list);\nprotect(op(YY)); #protect basis monomials\nRETURN(YY);\nen d:\n " }}{PARA 554 "" 0 "" {TEXT -1 355 "No. 4. Procedure 'find1str' finds all locations of the first stri ng of length one in the second string of length at least one. It retur ns a set of these positions. If the first string is not found then it returns \{0\}. This procedure is primarily for internal use in 'type/ clibasmon' and 'cliparse'. \n\nTypical use: find1str(e,e1we2we3); find 1str(w,e1we2);" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }{TEXT 288 0 "" } {TEXT -1 0 "" }{TEXT 289 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 552 "Cl iff5[find1str]:=proc(a1::symbol,a2::symbol) local ns,p,p1,ap,le2;\nglo bal _prolevel;\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz a nd Bertfried Fauser. All rights reserved.`, remember;\n#verified with \+ maplemint\nle2:=length(a2):\nif _prolevel=false then\nif length(a1) <> 1 or le2<1 then ERROR(\"first string must be of length 1\") fi;\nfi; \np:=SearchText(a1,a2):ap:=\{p\}:p1:=p:\nwhile p<>0 and p10 t hen p1:=p1+p;\n ap:=ap union \{p1\} \n fi;\nod;\nRETU RN(ap);\nend:\n" }}{PARA 553 "" 0 "" {TEXT -1 128 "No. 5. Definition o f the type 'clibasmon', i.e., a basis monomial. \n\nTypical use: type( e2we1,clibasmon); type(e1we2,clibasmon);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 813 "Cliff5[`type/clibasmon`]:=proc(a1)\n option inline ,remember,\n `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfr ied Fauser. All rights reserved.`;\n local i,str,lst,e_set,w_set,ind _lst,N;\n if a1 = Id then RETURN(true) fi;\n if type(a1,\{string,n ame,symbol\}) then\n str:=convert(a1,string);\n lst:=[seq(str[ i],i=1..length(a1))];\n N:=(nops(lst)+1)/3;\n if N=1 then \n \+ e_set:=\{lst[1]\};\n w_set:=\{\"w\"\};\n ind_lst:=[ls t[2]];\n else\n e_set:=\{seq(lst[3*i-2],i=1..N)\};\n w _set:=\{seq(lst[3*i],i=1..N-1)\};\n ind_lst:=[seq(lst[3*i-1],i=1 ..N)];\n fi;\n# print(e_set,w_set,ind_lst,N,lst);\n if (e_set= \{\"e\"\}) and (w_set=\{\"w\"\}) and ( N=nops(\{op(ind_lst)\}) ) then \n RETURN(true);\n else\n RETURN(false)\n fi;\n \+ else\n RETURN(false)\n fi; \nend:\n" }}{PARA 552 "" 0 "" {TEXT -1 375 "No. 6. Function 'cliparse' checks user's input for correct spe lling of basis monomials. When unable to decide if the given input is correct, it tells the user to check spelling or define the given stri ng as a Maple constant. If the spelling is correct, it returns true; i f it is not correct, it returns a set of suspect words.\n \nTypical us e: cliparse(e1+e2we3+2*Pi*B[1,2]);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1096 "Cliff5[cliparse]:=proc(a1::anything) local x,S1,S2,p,S;\ngloba l _prolevel,_scalartypes;\noptions `Copyright (c) 1995-2002 by Rafal A blamowicz and Bertfried Fauser. All rights reserved.`;\n#verified with maplemint\nif _prolevel then RETURN(true) fi;\nif type(a1,_scalartype s) then RETURN(true) fi;\np:=remove(type,a1,_scalartypes):S1:=\{op(p) \}:\nfor x in S1 do if type(x,_scalartypes) or type(x,'clibasmon') the n \n S1:=S1 minus \{x\} fi od; \nS2:=map(op,S1); \nfor x in S2 do if type(x,_scalartypes) or type(x,'clibasmon') then \n \+ S2:=S2 minus \{x\} fi od;\nS:=remove(hastype,map(op,\{op(expa nd(p))\}),\{op(_scalartypes),'clibasmon'\});\nfor x in S do if Cliff5[ find1str](e,x)=\{0\} and x<>'Id' then S:=S minus \{x\} fi od;\nif S=\{ \} then RETURN(true) fi;\nS1:=select(type,S,procedure):\nif S1 <> \{\} then\n ERROR(\"procedure name\",op(S1),\"that has been found in inp ut is not allowed as a symbolic coefficient\")\nfi;\nif nops(S)=1 then \nERROR(\"check spelling of\",op(S),\"or define it as a constant or a n alias\")\nelse \nERROR(\"check spelling of\",op(S),\"or define them \+ as constants or aliases\") \nfi;\nend:\n" }}{PARA 551 "" 0 "" {TEXT -1 296 "No. 7. Definition of the type 'cliscalar', i.e., Clifford scal ar. A Clifford scalar is essentially any number, function, constant, o r an algebraic expression not containing any basis monomials (this mea ns that 2*Id is not of type 'cliscalar').\n\nTypical use: type(e1+e2we 3+2*Pi*B[1,2],cliscalar);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 664 "Cli ff5[`type/cliscalar`]:=proc(a1::anything) local locscalartypes;\ngloba l `&C`,_scalartypes; \noptions `Copyright (c) 1995-2002 by Rafal Ablam owicz and Bertfried Fauser. All rights reserved.`;\n#verified with map lemint\nlocscalartypes:=remove(member,_scalartypes,\{`^`\}):\nif type( a1,\{matrix,list\}) or hastype(a1,clibasmon) or \n hastype(a1,tensor prod) or has(a1,`&C`) then RETURN(false) \nfi; \nif type(a1,locscalart ypes) or evalb(op(map(type,\{op(a1)\},locscalartypes))=true)\n then \+ RETURN(true) \nfi;\nif type(a1,`^`) then\n if select(hastype,\{a1\}, clibasmon)=\{\} then\n RETURN(true) else ERROR(\"illegal expressi on in \",a1) fi;\nfi;\nRETURN(Cliff5[cliparse](a1));\nend:\n" }}{PARA 550 "" 0 "" {TEXT -1 236 "No. 8. Definition of the type 'climon', i.e ., Clifford monomial. A Clifford monomial is essentially any basis mon omial (of type 'clibasmon') multiplied by a Clifford scalar (of type ' cliscalar').\n\nTypical use: type(e1we2+2*e2,climon);\n" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 682 "Cliff5[`type/climon`]:=proc(x) local S,xx,fla g5plus:\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bert fried Fauser. All rights reserved.`;\n#verified with maplemint\n###### ############\nflag5plus:=assigned(Cli5plus):\nif hastype(x,cliprod) an d not flag5plus and _warnings_flag then \n WARNING(`argument to 'typ e/climon' contains type 'cliprod'. Load 'Cli5plus' to extend function ality of CLIFFORD. Type ?cliprod for help.`);\nfi;\n################## \nif not flag5plus then S:=\{'clibasmon'\} else S:=\{'clibasmon','clip rod'\} fi;\nxx:=simplify(x):\nif type(xx,cliscalar) then false\nelif e valb(type(xx,`*`) and nops(select(type,\{op(xx)\},S))=1) then\n true \nelse \n false;\nfi;\nend:\n" }}{PARA 549 "" 0 "" {TEXT -1 307 "No. 9. Definition of the type 'clipolynom', i.e., Clifford polynomial. A Clifford polynomial is a multivariate polynomial in the unknowns of t ype 'climon' or 'cliprod', i.e., Clifford monomial, with coefficients \+ of the type 'cliscalar', i.e., Clifford scalar.\n\nTypical use: type(e 1+2*Pi*e2we3,clipolynom);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1016 "Cl iff5[`type/clipolynom`]:=proc(x) local flag5plus:\noptions `Copyright \+ (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights res erved.`;\n#verified with maplemint\nif type(eval(x),\{matrix,list,set, cliscalar\}) or \n (not type(eval(x),algebraic)) or\n hastype(eval (x),tensorprod) then \n RETURN(false) \nfi;\nflag5plus:=assigned( Cli5plus):\nif hastype(x,cliprod) and not flag5plus and _warnings_flag then \n WARNING(`argument to 'type/clipolynom' contains type 'clipr od'. Load 'Cli5plus' to extend functionality of CLIFFORD. Type ?clipr od for help.`);\nfi;\n#####################################\n### Since 'cliterms' counts cliprods, the following no longer works:\n#if nops( Cliff5[cliterms](x))>1 then RETURN(true) fi;\n######################## #############\nif evalb(not flag5plus and type(expand(x),`+`) and hast ype(x,clibasmon) and not hastype(x,cliprod)) \n then RETURN(true) \n fi:\nif evalb(flag5plus and type(expand(x),`+`) and hastype(x,\{clibas mon,cliprod\})) then RETURN(true) fi: \nRETURN(false)\nend:" }}{PARA 0 "" 0 "" {MPLTEXT 0 21 0 "" }{MPLTEXT 1 0 0 "" }}{PARA 548 "" 0 "" {TEXT -1 214 "No. 10. Function 'displayid' replaces a user-entered Cli fford scalar with the scalar times the unit element 'Id'. It may also \+ be applied to matrices with Clifford algebra entries.\n\nTypical use: \+ displayid(e1+2*Pi);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 548 "Cliff5[di splayid]:=proc(a1::\{array,matrix,algebraic\}) local KK,p;\noptions `C opyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All r ights reserved.`;\n#verified with maplemint\nKK:=proc() if type(args[1 ],'cliscalar') then RETURN(args[1]*Id) elif\n hastype(args[1 ],'clibasmon') then RETURN(args[1]) fi end:\nif type(a1,\{array,matrix \}) then RETURN(map(procname,a1)) fi;\np:=expand(a1):\nif type(p,\{`*` ,'cliscalar','clibasmon','climon'\}) then\n RETURN(KK(p)) elif\n t ype(p,\{`+`\}) then RETURN(map(KK,p)) else\n RETURN(a1) fi;\nend:\n " }}{PARA 547 "" 0 "" {TEXT -1 252 "No. 11. Procedure 'cliterms' ident ifies Clifford basis elements in the given Clifford polynomial.\n\nNOT E: 'cliterms' also works with terms of type 'cliprod' and it finds cor rectly terms involving such expressions. \n\nTypical use: cliterms(2*P i+2*e1we2);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 975 "Cliff5[cliterms]: = proc(a1::anything) local S1,S2,S3,x,p,Cli5plusflag;\noptions `Copyri ght (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n#verified with maplemint\nCli5plusflag:=assigned(Cli5plu s):\nif hastype(a1,cliprod) and not Cli5plusflag and _warnings_flag th en \n WARNING(`argument to 'cliterms' contains type 'cliprod'. Load \+ 'Cli5plus' to extend functionality of CLIFFORD. Type ?cliprod for hel p.`);\nfi;\nif type(a1,\{'clibasmon','cliprod'\}) then RETURN(\{a1\}) \+ fi;\np:=Cliff5[displayid](simplify(a1)):\nif hastype(p,cliprod) then \+ \n S1 := remove( type, \{op(p)\}, 'cliscalar');\n S2:=select(hasty pe,S1,\{clibasmon,climon,cliprod\});\n S3:=\{\}:\n while not S2=\{ \} do\n S3:=S3 union select(type,S2,\{clibasmon,cliprod\});\n \+ S2:=select(hastype,map(op,remove(type,S2,\{clibasmon,cliprod\} )),\{clibasmon,cliprod\});\n od;\nRETURN(S3);\nfi;\nx:='x':\nS1:=rem ove(type,\{op(p)\},'cliscalar');\nRETURN(\{seq(select(hastype,x,'cliba smon'),x=S1)\});\nend:\n" }}{PARA 546 "" 0 "" {TEXT -1 395 "No. 12. Pr ocedure 'clibilinear' makes any procedure K specified as the third arg ument bilinear with respect to Clifford scalars in the first two argum ents. The first two arguments are of the type 'clipolynom', i.e., Clif ford polynomials. The third argument is a string or a procedure.\nIt c an handle terms involving elements of type 'cliprod'.\n\nTypical use: \+ clibilinear(e1+2*e2we3,Id+2*e2+e3,K);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1092 "Cliff5[clibilinear]:=\nproc(a1,a2,a3::\{procedure,name,symbo l,matrix,array\}) \n local tail,p1,p2,S1,S2,S12,res,x,y,cli1,cli2,c o1,co2;\n global Cli5plus; \n options `Copyright (c) 1995-2002 b y Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n #ve rified with maplemint\n if simplify(a1)=0 or simplify(a2)=0 then RETU RN(0) fi; \n if (hastype(a1,cliprod) or hastype(a2,cliprod)) and \n \+ not assigned(Cli5plus) then readlib(Cli5plus);\n #lprint(`War ning, package Cli5plus has been loaded by clibilinear`);\n fi; \n p1 :=Cliff5[clicollect](a1):\n p2:=Cliff5[clicollect](a2):\n tail:=args [4..-1];\n if type(p1,\{'climon','cliprod'\}) then S1:=[p1] else S1:= [op(p1)] fi:\n if type(p2,\{'climon','cliprod'\}) then S2:=[p2] else \+ S2:=[op(p2)] fi:\n S12:=[seq(seq([x,y],x=S1),y=S2)];#this list will b e huge for long polynomials\n res:=0:\n for x in S12 do \n cli1:= select(type,x[1],\{'cliprod','clibasmon'\}):\n cli2:=select(type,x[ 2],\{'cliprod','clibasmon'\}):\n co1:=coeff(x[1],cli1):\n co2:=c oeff(x[2],cli2):\n res:=res+co1*co2*a3(cli1,cli2,tail):\n od:\n R ETURN(res);\nend:\n" }}{PARA 545 "" 0 "" {TEXT -1 367 "No. 13. Procedu re 'clilinear' makes any procedure K specified as the second argument \+ linear with respect to Clifford scalars (elements of type 'cliscalar') . It can now distribute over Clifford polynomials with elements of `ty pe/cliprod`.\nAny additional parameters are passed on to the procedure entered as the second argument.\nTypical use: clilinear(a*e1+2*e2we3, K);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 632 "Cliff5[clilinear]:=\nproc (a1::\{symbol,cliscalar,clibasmon,climon,clipolynom\},a2::\{name,proce dure\}) \nlocal tail,p1,S1,res,x,cli1,co1;\noptions `Copyright (c) 199 5-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.` ;\n#verified with maplemint\ntail:=args[3..-1];\nif type(a1,'cliscalar ') then RETURN(a1*a2(Id,tail)) fi;\np1:=Cliff5[displayid](a1):\nif typ e(p1,'climon') then S1:=[p1] else S1:=[op(p1)] fi:\nres:=0:\nfor x in \+ S1 do\n x; \n cli1:=select(hastype,x,\{'clibasmon','cliprod'\}): \n #co1:=remove(has,x,cli1):\n co1:=coeff(x,cli1); \n#if co1=NUL L then co1:=1 fi;\nres:=res+co1*a2(cli1,tail):\nod;\nRETURN(res):\nend :\n" }}{PARA 542 "" 0 "" {TEXT -1 341 "No. 14. Procedure 'clisort' sor ts the given multivariate Clifford polynomial with respect to the Clif ford indetereminates found in the expression via the procedure 'cliter ms'. It puts scalar coefficients of the type 'cliscalar' in front of t he Clifford basis monomials. It may also be applied to matrices with e ntries in a Clifford algebra. " }}{PARA 543 "" 0 "" {TEXT -1 0 "" }} {PARA 544 "" 0 "" {TEXT -1 40 "Typical use: clisort(2*e1we2 - e1*b); \+ \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 378 "Cliff5[clisort]:=proc(p::alg ebraic) local L,N;\noptions `Copyright (c) 1995-2002 by Rafal Ablamowi cz and Bertfried Fauser. All rights reserved.`;\n#verified with maplem int\nif type(p,matrix) then RETURN(map(procname,p)) fi;\nif type(p,\{' climon','clipolynom'\}) or hastype(p,cliprod) then\n L:=Cliff5[clite rms](expand(Cliff5[displayid](p)));\n RETURN(sort(p,L))\nfi;\nRETURN (p);\nend:\n" }}{PARA 539 "" 0 "" {TEXT -1 417 "No. 15. Procedure 'cl icollect' reorders monomial terms in standard order and then collects \+ them in a multivariate Clifford polynomial. It may also be applied to \+ matrices with entries in a Clifford algebra. It will simplify 6 + 7*Id to 13*Id. It collects now terms of type 'cliprod', if present.\n\nNO TE: 'clicollect' also works with terms of type 'cliprod' and it collec ts correctly terms involving such expressions. " }}{PARA 540 "" 0 "" {TEXT -1 0 "" }}{PARA 541 "" 0 "" {TEXT -1 46 "Typical use: clicollect (e1 + a*e1 - e1we2); \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 470 "Cliff5 [clicollect]:=proc(a1::algebraic) local p,L; \noptions `Copyright (c) \+ 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserve d.`;\n#verified with maplemint\nif type(a1,matrix) then RETURN(map(pro cname,a1)) fi;\n#p:=simplify(expand(a1)):\np:=expand(a1):\nif type(p,' cliscalar') then RETURN(p*Id)\nelif type(p,'clipolynom') then \n L :=Cliff5[cliterms](p);\n RETURN(map(simplify,collect(Cliff5[displa yid](p),L,'distributed')))\nelse RETURN(a1) \nfi;\nend:\n" }}{PARA 536 "" 0 "" {TEXT -1 351 "No. 16. The procedure 'ord' returns an orde red list of positions in a monomial, e.g., e1we2, where vector indic es are found. Then, nops(ord(e1we2)) can be used to find the order of the monomial. Note that for consistency we have ord(Id) = ord(numeri c) = ord(numeric*Id) = ord(cliscalar)=[] where 'cliscalar' is any obje ct of the type 'cliscalar'." }}{PARA 537 "" 0 "" {TEXT -1 0 "" }} {PARA 538 "" 0 "" {TEXT -1 35 "This procedure is for internal use." }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 330 "Cl iff5[ord]:=proc(a1) local v,k;\noptions `Copyright (c) 1995-2002 by Ra fal Ablamowicz and Bertfried Fauser. All rights reserved.`,remember;\n #verified with maplemint\nif type(a1,'cliscalar') then RETURN([]) fi; \nv:=select(type,a1,'clibasmon');\nif v = Id then RETURN([]) fi;\nk:=' k':\nRETURN([seq(2+3*k,k=0..((length(v)+1)/3-1))])\nend:\n" }}{PARA 535 "" 0 "" {TEXT -1 223 "No. 17. Procedure 'cliremove' removes one s ymbol 'ei' from the location specified by the procedure 'ord'. \n(NOTE : procedure 'ord' specifies location of the index 'i' in 'ei'.) This \+ procedure is primarily for internal use." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 479 "Cliff5[cliremove]:=proc(p:: posint,s::symbol) local S1,S2;global _prolevel;\noptions `Copyright (c ) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reser ved.`,remember;\n#verified with maplemint\nif not _prolevel then\n i f s=Id then ERROR(\"second argument must be Grassmann basis monomial o f rank >= 1\") fi;\nfi;\nS2:=substring(s,(p+2)..length(s));\nS1:=subst ring(s,1..(p-3));\nif length(S2)=0 and S1 <> s then S1 elif \n S1 = \+ s then S2 else \n cat(S1,\"w\",S2) fi;\nend:\n" }}{PARA 532 "" 0 "" {TEXT -1 472 "No. 18. Procedure 'extract' extracts indices of a monomi al (or a constant times a monomial) and it returns them as a list of s trings. If necessary, they can be returned as a list of integers if o ption 'integers' is selected (in fact, any name which evaluates to a s tring may be used as the option). Indices could be now integers, lett ers, or they could be mixed. Note that extract(Id) = [] and extract(nu meric) = extract(numeric*Id) = [] results in no vector indices. " }} {PARA 533 "" 0 "" {TEXT -1 0 "" }}{PARA 534 "" 0 "" {TEXT -1 63 "Typic al use: extract(2*e1we2); or extract(e2we3, \"integers\"); " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 711 "Cliff5[e xtract]:=proc(a1::\{symbol,cliscalar,clibasmon,climon\},a2::symbol) \n local v,k,inds;global _prolevel,str_to_int;\noptions `Copyright (c) 19 95-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved. `,remember;\n#verified with maplemint\nif type(a1,'cliscalar') or (typ e(a1,symbol) and length(a1)=1) then RETURN([]) \nelif\n type(a1,\{'c limon','clibasmon'\}) then v:=select(type,a1,'clibasmon'):\nelse \n \+ ERROR(\"wrong argument:\",a1) \nfi;\nif v = Id then RETURN([]) fi;\nk: ='k':\ninds:=[seq(substring(v,(2+3*k)..(2+3*k)),k=0..((length(v)+1)/3- 1))];\nif nargs=1 then RETURN(inds) elif \n type(a2,symbol) then RET URN(map(convert,inds,str_to_int))\nelse ERROR(\"wrong option or number of arguments\") fi;\nend:\n" }}{PARA 0 "" 0 "" {TEXT 274 120 "No. 19. Converts strings `1`, `2`, ..., `0` to appropriate digit.\n\nTypical \+ use: map(convert,extract(e1we2),str_to_int);\n" }{MPLTEXT 0 21 0 "" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 547 "Cliff5[`convert/str_to_int`]:=proc (a1::symbol)\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`,remember;\nif args[1] = `0` t hen RETURN(0) elif\n args[1] = `1` then RETURN(1) elif\n args[1] = `2` then RETURN(2) elif\n args[1] = `3` then RETURN(3) elif\n arg s[1] = `4` then RETURN(4) elif\n args[1] = `5` then RETURN(5) elif\n args[1] = `6` then RETURN(6) elif\n args[1] = `7` then RETURN(7) \+ elif\n args[1] = `8` then RETURN(8) elif\n args[1] = `9` then RETU RN(9) else\n RETURN(a1)\nfi;\nend:\n" }}{PARA 527 "" 0 "" {TEXT -1 358 "No. 20. Procedure 'reorder' reorders Clifford monomials in the g iven Clifford polynomial using standard ordering and calculates sign o f each permutation, e.g., reorder(e1we3we2) = -e1we2we3, reorder(e2we1 + 2*e1we5we2) = -e1we2 - 2*e1we2we5. If any one of the indices of the monomial is a letter, e.g., reorder(eiwe3) = eiwe3, reorder returns i ts argument. " }}{PARA 528 "" 0 "" {TEXT -1 0 "" }}{PARA 529 "" 0 "" {TEXT -1 139 "Reorder now can order monomials and polynomials with sym bolic coefficients, e.g. reorder(ejwei) = -eiwej, using the lexicogra phic order. " }}{PARA 530 "" 0 "" {TEXT -1 0 "" }}{PARA 531 "" 0 "" {TEXT -1 48 "Typical use: reorder(e2we1 + 2*Id + e4we3we1); " }} {PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1347 "C liff5[reorder]:=proc(a1::algebraic) \n local L1,L2,N,n ewbas,f,a,x,K,dummy_set,n12,s12,ss;\n global B,dim_V; \noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried F auser. All rights reserved.`;\n#verified with maplemint\n\n########### ####### delete as it is not needed\n# if not type(dim_V,Range(0,10)) or \n# not type(dim_V,posint) then\n# ERROR(`value of dim_V must be a positive integer between 1 and 9, inclusive`)\n# fi;\n### ############### delete as it is not needed\n\nif type(a1,\{matrix,`+`, `*`\}) then RETURN(map(procname,a1)) fi; \nL1:=Cliff5[extract](a1);\nN :=nops(L1);\n\n################## new\nif N>9 then ERROR(`detected bas is monomial of grade higher than 9 in the input`) fi;\n############### ### new\n\nif N=0 or N=1 then RETURN(a1) fi;\n\n################## new \nn12:= select(member,L1,\{`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`\}):\ns1 2:= remove(member,L1,\{`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`\}):\nL2:=[o p(sort(n12)),op(sort(s12))];\n################## new\n\nf:=proc() end: \nfor ss from 1 to N do\n f(L2[ss]):=L1[ss];\nod:\ndummy_set:=convert (L1,set):\nK:=0:\nwhile dummy_set <> \{\} do\n a:=dummy_set[1]:\n du mmy_set:=dummy_set[2..-1];\n x:=a:\n while f(x)<>a do\n x:=f(x) ;\n dummy_set:=dummy_set minus \{x\};\n K:=K+1;\n od:\nod: \nnewbas:=cat(e.(op(L2[1..-2])).w,e,L2[-1]):\nRETURN((-1)^K*newbas);\n end:\n" }}{PARA 526 "" 0 "" {TEXT -1 262 "No. 21. Defining a useful fu nction which finds the greatest index in the given Clifford polynomial or in the given list or set of Clifford monomials. It returns 0 for a Clifford scalar (an element of type 'cliscalar').\n\nTypical use: max index(a*Id+6+2*Pi*e1we2);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 748 "Cli ff5[maxindex]:=proc(a1::\{cliscalar,clibasmon,climon,clipolynom,list,s et\}) \nlocal inds,mons,symbinds;\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n#verif ied with maplemint\nif type(a1,'cliscalar') or a1=Id then RETURN(0) el if\n type(a1,list) then RETURN(max(op(convert(map(procname,a1),set)) )) elif\n type(a1,set) then RETURN(max(op(map(procname,a1)))) else \+ \n mons:=Cliff5[cliterms](a1);\n inds:=map(op,map(Cliff5[extract], mons,'integers'));\n symbinds:=remove(type,inds,integer);\n if sym binds = \{\} then\n if inds=\{\} then RETURN(0) else RETURN(max(o p(inds))) fi;\n else\n ERROR(`cannot determine maximum index be cause input contains symbolic index or indices`)\n fi;\nfi;\nend:\n " }}{PARA 525 "" 0 "" {TEXT -1 212 "No. 22. Defining a useful function which finds the maximum grade in the given Clifford polynomial. It r eturns 0 for a Clifford scalar (an element of type 'cliscalar').\n\nTy pical use: maxgrade(a*Id+6+2*Pi*e1we2);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 330 "Cliff5[maxgrade]:=proc(a1::\{cliscalar,clibasmon,cli mon,clipolynom\}) local S;\noptions `Copyright (c) 1995-2002 by Rafal \+ Ablamowicz and Bertfried Fauser. All rights reserved.`;\n#verified wit h maplemint\nif type(a1,'cliscalar') then RETURN(0) fi;\nS:=\{op(Cliff 5[cliterms](a1))\}:\nRETURN(max(op(map(nops,map(Cliff5[extract],S))))) ;\nend:\n" }}{PARA 522 "" 0 "" {TEXT -1 256 "No. 23. Procedure 'LC' d efines a left contraction between any multivector u and a multivector \+ v, i.e., multivector u acts on the multivector v from the left. This \+ procedure is now bilinear in both arguments. It can accept third argu ment such as K or -K." }}{PARA 523 "" 0 "" {TEXT -1 0 "" }}{PARA 524 " " 0 "" {TEXT -1 46 "Typical use: LC(e1 + 2*e2, e1we3 + b*e2we3); \n" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 2256 "Cliff5[LC]:=proc(x::\{cliscalar, clibasmon,climon,clipolynom\},\n y::\{cliscalar,clibas mon,climon,clipolynom\})\n local N1,N2,lst1,lst2,i,j,cf,ter m,lname,res,coB,nameB;\n global _CLIENV,B;\noptions `Copyri ght (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n################################ \nif nargs=2 then\n \+ coB:=1:\n nameB:=`B`: \n lname:=`B`: \nelif nargs=3 then\n i f type(args[3],\{name,symbol,matrix,array\}) then\n coB:=1:\n \+ nameB:=args[3];\n lname:=args[3];\n elif type(args[3],`&* `(numeric,\{name,symbol,matrix,array\})) then\n coB:=op(select(t ype,\{op(args[3])\},numeric));\n nameB:=op(remove(type,\{op(args [3])\},numeric));\n lname:=args[3]:\n else \n ERROR(`wr ong type of third argument in LC`) \n fi;\nelse\n ERROR(`two or th ree arguments expected in LC`):\nfi;\n################################ \n if type(x,`clibasmon`) then\n if type(y,`clibasmon`) then\n \+ lst1:=Cliff5[extract](x,'integers');\n lst2:=Cliff5[extract](y, 'integers');\n N1:=nops(lst1);N2:=nops(lst2);\n if N1>N2 the n RETURN(0) fi;\n if N1=0 then RETURN(y) fi;\n if N1=1 then \+ \n res:=`+`(seq(coB*nameB[lst1[1],lst2[j]]*_CLIENV[_QDEF_PREFACTO R]^(j-1)*\n makeclibasmon([op(subs(lst2[j]=NULL, lst2))]),j=1..N2));\n RETURN(Cliff5[reorder](res)); \n else \n res:=procname(makeclibasmon(lst1[1..-2]),\n \+ procname(makeclibasmon([lst1[-1]]),y,lname),lname);\n RETURN(Cli ff5[reorder](res));\n fi;\n elif type(y,'climon') then\n \+ cf,term:=remove(type,y,clibasmon),select(type,y,clibasmon);\n \+ RETURN(expand(cf*procname(x,term,lname)));\n elif type(y,'clipo lynom') then\n RETURN(add(procname(x,i,lname),i=[op(y)]));\n \+ elif type(y,'cliscalar') then RETURN(displayid(scalarpart(x)*y)); \n fi; \n elif type(x,`climon`) then\n cf,term:=remove(type,x, clibasmon),select(type,x,clibasmon);\n RETURN(expand(cf*procname(te rm,y,lname)));\n elif type(x,`clipolynom`) then\n RETURN(add(procn ame(i,y,lname),i=[op(x)]));\n elif type(x,`cliscalar`) then \n RET URN(x*Cliff5[reorder](y))\n fi;\n ERROR(\"Got input\",x,\"and\",y,\" but can process only constants and Clifford numbers\");\nend:\n" }} {PARA 517 "" 0 "" {TEXT -1 293 "No. 24. Procedure 'LCQ' is a special v ersion of 'LC' and gives left contraction in the orthogonal Clifford a lgebra Cl(Q) of the quadratic form Q defined via the symmetric part g \+ of B as Q(x) = g(x, x) = B(x, x). It can accept name as a third optio nal argument or a numeric multiple of a name." }}{PARA 518 "" 0 "" {TEXT -1 0 "" }}{PARA 519 "" 0 "" {TEXT -1 76 "Proposed by Yvon Siret, Universite Joseph Fourier, Grenoble, France. Thanks!" }}{PARA 520 "" 0 "" {TEXT -1 0 "" }}{PARA 521 "" 0 "" {TEXT -1 82 "Typical use: LCQ(e 1 + 2*e2, e1we3 + b*e2we3);\nLCQ(e1 + 2*e2, e1we3 + b*e2we3,K); \n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 1702 "Cliff5[LCQ]:=proc(x::\{cliscalar, clibasmon,climon,clipolynom\},\n y::\{cliscalar,cliba smon,climon,clipolynom\}) \n local ii,N,L,m,Sxy,symbx y,lname,coB,nameB;global B:\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n############ #################### \nif nargs=2 then\n coB:=1:\n nameB:=`B`: \+ \n lname:=`B`: \nelif nargs=3 then\n if type(args[3],\{name,symb ol,matrix,array\}) then\n coB:=1:\n nameB:=args[3];\n \+ lname:=args[3];\n elif type(args[3],`&*`(numeric,\{name,symbol,ma trix,array\})) then\n coB:=op(select(type,\{op(args[3])\},numeri c));\n nameB:=op(remove(type,\{op(args[3])\},numeric));\n \+ lname:=args[3]:\n else \n ERROR(`wrong type of third argument in LCQ`) \n fi;\nelse\n ERROR(`two or three arguments expected in LCQ`):\nfi;\n################################\nSxy:=remove(type,map(o p,\{op(x),op(y)\}),cliscalar);\nSxy:=map(op,map(Cliff5[extract],Sxy,'i ntegers'));\nsymbxy:=remove(type,Sxy,posint);\nif symbxy <> \{\} then \+ \n RETURN(Cliff5[LC](x,y,lname)) \nfi;\nm:=max(op(Sxy),1);# 1 is nee ded when both x and y have maxindex=0\nif type(evalm(lname),matrix) th en \n N:=linalg[coldim](evalm(lname)):\n if m>N then ERROR(`input \+ contains index larger than size of bilinear form`,lname) fi:\nfi:\nif \+ type(lname,\{name,symbol,array,matrix\}) then\n L:=seq(lname[ii,ii], ii=1..m);\n RETURN(Cliff5[LC](x,y,linalg[diag](L)));\nelif \n type (lname,`&*`(numeric,\{name,symbol,array,matrix\})) then\n coB:=op(se lect(type,\{op(lname)\},numeric));\n nameB:=op(select(type,\{op(lnam e)\},\{name,symbol,array,matrix\}));\n L:=seq(coB*nameB[ii,ii],ii=1. .m);\n RETURN(Cliff5[LC](x,y,linalg[diag](L)));\nfi;\nend:\n" }} {PARA 597 "" 0 "" {TEXT -1 264 "No. 25. Procedure 'RC' defines a righ t contraction between any multivector u and a multivector v, i.e., mul tivector u acts on the multivector v from the right. This procedure i s now bilinear in both arguments. It can accept third optional argume nt like B or -B." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 295 46 "Typical use: RC(e1 + 2*e2, e1we3 + b*e2we3); \n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 2246 "Cliff5[RC]:=proc(x::\{cliscalar,c libasmon,climon,clipolynom\},\n y::\{cliscalar,clibasm on,climon,clipolynom\})\n local N1,N2,lst1,lst2,i,j,cf,term,lname,res ,coB,nameB;\n global _CLIENV,B;\n options `Copyright (c) 1995-2002 b y Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n##### ########################### \nif nargs=2 then\n coB:=1:\n nameB :=`B`: \n lname:=`B`: \nelif nargs=3 then\n if type(args[3],\{na me,symbol,matrix,array\}) then\n coB:=1:\n nameB:=args[3]; \n lname:=args[3];\n elif type(args[3],`&*`(numeric,\{name,sy mbol,matrix,array\})) then\n coB:=op(select(type,\{op(args[3])\} ,numeric));\n nameB:=op(remove(type,\{op(args[3])\},numeric));\n lname:=args[3]:\n else \n ERROR(`wrong type of third a rgument in RC`) \n fi;\nelse\n ERROR(`two or three arguments expec ted in RC`):\nfi;\n################################\n if type(x,`clib asmon`) then\n if type(y,`clibasmon`) then\n lst1:=Cliff5[extr act](x,'integers');\n lst2:=Cliff5[extract](y,'integers');\n \+ N1:=nops(lst1);N2:=nops(lst2);\n if N2>N1 then RETURN(0) fi;\n \+ if N2=0 then RETURN(x) fi;\n if N2=1 then \n res:=`+` (seq(coB*nameB[lst1[-i],lst2[1]]*_CLIENV[_QDEF_PREFACTOR]^(i-1)*\n \+ makeclibasmon([op(subs(lst1[-i]=NULL,lst1))]),i=1..N1) );\n RETURN(Cliff5[reorder](res)); \n else\n r es:=procname(procname(x,makeclibasmon([lst2[1]]),lname),\n \+ makeclibasmon(lst2[2..-1]),lname);\n RET URN(Cliff5[reorder](res));\n fi;\n elif type(y,'climon') then \n cf,term:=remove(type,y,clibasmon),select(type,y,clibasmon);\n \+ RETURN(expand(cf*procname(x,term,lname)));\n elif type(y,'clip olynom') then\n RETURN(add(procname(x,i,lname),i=[op(y)]));\n \+ elif type(y,'cliscalar') then RETURN(Cliff5[reorder](x)*y) \n fi;\n elif type(x,`climon`) then\n cf,term:=remove(type,x,clibasmon),se lect(type,x,clibasmon);\n RETURN(expand(cf*procname(term,y,lname))) ;\n elif type(x,`clipolynom`) then\n RETURN(add(procname(i,y,lname ),i=[op(x)]));\n elif type(x,`cliscalar`) then RETURN(displayid(x*sca larpart(y)))\n fi;\n ERROR(\"Got input\",x,\"and\",y,\"but can proce ss only constants and Clifford numbers\");\nend:\n" }}{PARA 0 "" 0 "" {TEXT 296 106 "No. 26. Procedure RCQ: Right contraction in Cl(Q). It c an accept third optional argument such as K or -K.\n" }{TEXT -1 0 "" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 1701 "Cliff5[RCQ]:=proc(x::\{cliscalar ,clibasmon,climon,clipolynom\},\n y::\{cliscalar,clib asmon,climon,clipolynom\}) \n local ii,N,L,m,Sxy,symb xy,lname,coB,nameB;global B:\noptions `Copyright (c) 1995-2002 by Rafa l Ablamowicz and Bertfried Fauser. All rights reserved.`;\n########### ##################### \nif nargs=2 then\n coB:=1:\n nameB:=`B`: \n lname:=`B`: \nelif nargs=3 then\n if type(args[3],\{name,sym bol,matrix,array\}) then\n coB:=1:\n nameB:=args[3];\n \+ lname:=args[3];\n elif type(args[3],`&*`(numeric,\{name,symbol,m atrix,array\})) then\n coB:=op(select(type,\{op(args[3])\},numer ic));\n nameB:=op(remove(type,\{op(args[3])\},numeric));\n \+ lname:=args[3]:\n else \n ERROR(`wrong type of third argumen t in RCQ`) \n fi;\nelse\n ERROR(`two or three arguments expected i n RCQ`):\nfi;\n################################\nSxy:=remove(type,map( op,\{op(x),op(y)\}),cliscalar);\nSxy:=map(op,map(Cliff5[extract],Sxy,' integers'));\nsymbxy:=remove(type,Sxy,posint);\nif symbxy <> \{\} then \n RETURN(Cliff5[RC](x,y,lname)) \nfi;\nm:=max(op(Sxy),1);# 1 is ne eded when both x and y have maxindex=0\nif type(evalm(lname),matrix) t hen \n N:=linalg[coldim](evalm(lname)):\n if m>N then ERROR(`input contains index larger than size of bilinear form`,lname) fi:\nfi:\nif type(lname,\{name,symbol,array,matrix\}) then\n L:=seq(lname[ii,ii] ,ii=1..m);\n RETURN(Cliff5[RC](x,y,linalg[diag](L)));\nelif \n typ e(lname,`&*`(numeric,\{name,symbol,array,matrix\})) then\n coB:=op(s elect(type,\{op(lname)\},numeric));\n nameB:=op(select(type,\{op(lna me)\},\{name,symbol,array,matrix\}));\n L:=seq(coB*nameB[ii,ii],ii=1 ..m);\n RETURN(Cliff5[RC](x,y,linalg[diag](L)));\nfi;\nend:" }} {PARA 514 "" 0 "" {TEXT -1 162 "\nNo. 27. Procedure 'gradeinv' is the \+ grade involution in the Clifford algebra,i.e., it reverses signs of od d elements and leaves signs of even elements unchanged." }}{PARA 515 " " 0 "" {TEXT -1 0 "" }}{PARA 516 "" 0 "" {TEXT -1 48 "Typical use: gra deinv(e1 + e1we2 - 4*e3we4); \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 498 "Cliff5[gradeinv]:=proc(a1::\{matrix,cliscalar,clibasmon,climon,cl ipolynom\}) global _CLIENV;\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n#verified wi th maplemint\nif type(a1,matrix) then RETURN(map(procname,a1)) fi;\n#i f not assigned(_CLIENV) then _CLIENV[_QDEF_PREFACTOR]:=-1 fi;\nif type (a1,'clibasmon') then RETURN((_CLIENV[_QDEF_PREFACTOR])^Cliff5[maxgrad e](a1)*a1) \n else RETURN(Cliff5[clilinear](a1, procname)) \nfi;\nend:\n" }}{PARA 511 "" 0 "" {TEXT -1 1328 "No. 28. D efine the 'wedge' product of any number of Clifford polynomials. The \+ infix form of this associative multiplication is `&w`. Thus, e1 &w e2 = wedge(e1, e2), etc. Via the procedure 'rmulm' described below, wed ge multiplication may be applied to matrices with entries in a Cliffor d algebra or in an exterior algebra.\n\nNew feature: When the dimensio n of the vector space is known, either from the size of the matrix B o r from the global parameter dim_V that can be set by the user, the out put of the procedure does not include terms of grade higher than the d imension of the vector space in case symbolic indices are used. \n\nTh e default value of this global variable is 9 and it it set by the init ialization file when Cliff5 is loaded.\n\nWhen the procedure is invoke d, it checks whether the bilinear form B has been defined. If yes, the procedure checks whether the size of B is less than the current value of dim_V. If again yes, a warning message is issued by the procedure \+ and the value of dim_V is reduced. If the size of B is larger than the current value of dim_V, no warning message is issued and the value of dim_V is increased to linalg[coldim](B).\n\nThe warning message can \+ be supressed by addign 'false' to a global parameter _warnings_flag wh ose default value is set to true by the Cliff5 initialization file." } }{PARA 512 "" 0 "" {TEXT -1 0 "" }}{PARA 513 "" 0 "" {TEXT -1 96 "Typi cal use: wedge(e1 + e2, e4 + e1we2); wedge(e2 + 2*e1, e3, e4); (e2 + \+ 2*e1) &w (e3 + 2*); \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 3035 "Cliff5 [wedge]:=proc(a1::\{cliscalar,clibasmon,climon,clipolynom\},\n \+ a2::\{cliscalar,clibasmon,climon,clipolynom\}) \nlocal ii, kk,wedge2,pi,p1,p2,i1,i2,i12,n12,maxindexflag,expr,maxin;\nglobal dim_ V,B,_warnings_flag;\noptions `Copyright (c) 1995-2002 by Rafal Ablamow icz and Bertfried Fauser. All rights reserved.`;\n#verified with maple mint\nkk:='kk':\nif member(0,[args]) then RETURN(0) elif\n remove(ty pe,\{args\},cliscalar)=\{\} then RETURN(product(args[kk],kk=1..nargs)) \nfi;\nif type(B,matrix) then\n if linalg[coldim](B)<>dim_V then \n \+ if linalg[coldim](B) < dim_V then\n dim_V:=linalg[coldim] (B);\n if _warnings_flag then\nprintf(\"Warning, since B has b een (re-)assigned, value of dim_V has been reduced by 'wedge' to %g\\n \",dim_V);\n fi;\n elif linalg[coldim](B)>dim_V then\n d im_V:=linalg[coldim](B);\n fi;\n fi;\nfi; \nif not type(dim_V,Ra nge(0,10)) or \n not type(dim_V,posint) then\n ERROR(`value of dim _V must be a positive integer between 1 and 9, inclusive, but current \+ value of dim_V is`,dim_V)\nfi;\n################\ni12:=\{\}:\nfor ii f rom 1 to nargs do\n pi:=args[ii]: \n i12:=i12 union map(op,map(C liff5[extract],Cliff5[cliterms](pi),'integers')):\nod;\nn12:= select(m ember,i12,\{1,2,3,4,5,6,7,8,9\}):\nif not n12=\{\} then\n maxin:=max (op(n12)); \n maxindexflag:=evalb(maxin > dim_V);\nelse maxindexflag :=false:\nfi:\nif maxindexflag then \n ERROR(`argument(s) contain(s) index larger then current value of dim_V which is now`, dim_V,`To com plete computation, increase value of dim_V or assign square matrix of \+ size at least`,maxin,`by`,maxin,`to bilinear form B`)\nfi;\n\n######## ######## new\nwedge2:=proc() local expr,i1,i2,n1,n2,i12,s12,symbindexf lag;global dim_V;\n i1:=\{op(Cliff5[extract](args[1]))\};n1:=nops(i1): \n i2:=\{op(Cliff5[extract](args[2]))\};n2:=nops(i2):\n if args[1]=Id \+ then \n if n2>dim_V then RETURN(0) else RETURN(args[2]) fi;\n fi;\n if args[2]=Id then \n if n1>dim_V then RETURN(0) else RETURN(args[ 1]) fi;\n fi;\n i1:=\{op(Cliff5[extract](args[1]))\};\n i2:=\{op(C liff5[extract](args[2]))\};\n i12:=i1 union i2;\n s12:= remove(mem ber,i12,\{`1`,`2`,`3`,`4`,`5`,`6`,`7`,`8`,`9`\}):\n symbindexflag:=e valb(not s12=\{\}):\n if i1 intersect i2 <> \{\} then \n RETURN (0) fi;\n if symbindexflag and nops(i1)+nops(i2) > dim_V then \n \+ RETURN(0) fi;\n RETURN(Cliff5[reorder](cat(args[1],\"w\",args[2]))); \nend:\n################ new\n\nif nargs=1 then RETURN(args)\nelif nar gs=2 then p1:=Cliff5[displayid](a1):\n p2:=Cliff5[dis playid](a2):\n expr:=Cliff5[clibilinear](p1,p2,wedge2 );\n if hastype(expr,trig) then \n \+ RETURN(Cliff5[clicollect](map(combine,Cliff5[clicollect](expr),trig) ))\n else \n RETURN(Cliff5[reorde r](expr))\n fi;\nelse expr:=procname(procname(a1,a2), args[3..nargs]):\n if hastype(expr,trig) then \n RETURN(Cli ff5[clicollect](map(combine,Cliff5[clicollect](expr),trig)))\n els e \n RETURN(Cliff5[reorder](expr))\n fi;\nfi;\nend:\n" }} {PARA 0 "" 0 "" {TEXT 306 38 "No. 29. Ampersand version of 'wedge'.\n " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 54 "Cliff5[`&w`]:=proc() RETURN(Cli ff5[wedge](args)) end:\n" }}{PARA 0 "" 0 "" {TEXT 297 146 "No. 30. Pro cedure \"permsign\" computes sign of a permutation that sorts a list o f indices.\n\nTypical use: permsign([1,3,2]); permsign([j,1,i,k,2]);\n " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 762 "Cliff5[permsign]:=proc(L::list ) local newbas,ss,a,n12,s12,L1,L2,N,f,dummy_set,K,x;\noptions `Copyrig ht (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights \+ reserved.`;\nL1:=L:\nN:=nops(L1):\nif N=1 then RETURN(1) fi:\n######## ########## new\nn12:= select(member,L1,\{1,2,3,4,5,6,7,8,9\});\ns12:= \+ remove(member,L1,\{1,2,3,4,5,6,7,8,9\});\nL2:=[op(sort(n12)),op(sort(s 12))];\n################## new\nf:=proc() end:\nfor ss from 1 to N do \n f(L2[ss]):=L1[ss];\nod;\ndummy_set:=convert(L1,set);\nK:=0:\nwhile dummy_set <> \{\} do\n a:=dummy_set[1]:\n dummy_set:=dummy_set[2..- 1];\n x:=a:\n while f(x)<>a do\n x:=f(x);\n dummy_set:=dum my_set minus \{x\};\n K:=K+1;\n od:\nod;\n#newbas:=cat(e.(op(L2[ 1..-2])).w,e,L2[-1]):\n#RETURN((-1)^K*newbas);\nRETURN((-1)^K);\nend: \n" }}{PARA 505 "" 0 "" {TEXT -1 175 "No. 31. Procedure 'cmulNUM' calc ulates Clifford product between any two Clifford monomials using the r ecursivelyChevalley's definition of the Clifford product: \+ " }}{PARA 506 "" 0 "" {TEXT -1 0 "" }}{PARA 507 "" 0 "" {TEXT -1 93 " xu = wedge(x, u) + LC( x, u) = x &w u + LC(x, u) " }}{PARA 508 "" 0 "" {TEXT -1 0 "" }} {PARA 509 "" 0 "" {TEXT -1 477 "where x is a vector and u is any eleme nt in the algebra, wedge(x,u) = x &w u denotes the wedge or exterior \+ product between x and u, and LC(x, u) denotes the left contraction of \+ u by x. This procedure is now bilinear in both arguments. The infix f orm is available e.g., e1 &c e2. This procedure works in Clifford alg ebras in dimensions up to and including 9. Multiplication of matrices with entries in a Clifford algebra can be done with a procedure 'rmul m' described below." }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 601 "" 0 "" {TEXT -1 128 "This procedure requires third argument of type name o r a numeric multiple of a name. Then it computes Clifford product in C l(K)." }}{PARA 600 "" 0 "" {TEXT -1 221 "\nThis version can take index as a way of passing a parameter. The index could be of type `&*`(num eric,\{name,symbol,array,matrix\}) or of type \{name,symbol,array,mat rix\}.\n\nWhen the bilinear form B is symbolic, use cmulRS." }}{PARA 510 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "" 0 "" {TEXT 301 55 "Typical use: cmulNUM(e1,e3we4,B); cmulNUM(e1,e3we4,-K);" }{TEXT 302 3 " \n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 1969 "Cliff5[cmulNUM]:=proc(a1,a2,lname ) \n local L,N,L2,x,x1,x2,S,i,ii,T1,T2,K,p1,p2,coB,nameB;global B:\n \+ options `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fa user. All rights reserved.`;\n######################################## ##############################################\n### old name cmul2B: t his procedure computes recursively Clifford product of any two #\n### \+ cliscalars, clibasmons, climons, and clipolynoms in Clifford algebras \+ Cl(lname) #\n######################################################## ##############################\n if nargs<>3 then ERROR(`exactly thre e arguments are needed`) fi:\n if has(0,map(simplify,[a1,a2])) then R ETURN(0) fi;\n if a2=`Id` then RETURN(a1) fi:\n if a1=`Id` then RETU RN(a2) fi:\n L:=Cliff5[extract](a1,'integers');\n N:=nops(L):\n ### #############\n ##### The following will allow for lname to be -B, fo r example:\n if type(lname,\{name,symbol,array,matrix\}) then\n c oB,nameB:=1,lname:\n elif type(lname,`&*`(numeric,\{name,symbol,array ,matrix\})) then\n coB:=op(select(type,\{op(lname)\},numeric));\n \+ nameB:=op(select(type,\{op(lname)\},name));\n else\n ERROR(`l name is of unexpected type`)\n fi;\n ################\n if N=0 then RETURN(coeff(a1,Id)*a2)\n elif N=1 then\n L2:=Cliff5[extract](a2, 'integers'):\n RETURN(Cliff5[reorder](simplify(Cliff5[makeclibasmon ]([L[1],op(L2)])\n +add((-1)^(i-1)*coB*nameB[L[1],L2[i]]*\n \+ Cliff5[makeclibasmon](subs(L2[i]=NULL,L2)),i=1..nops(L2))\n ))); \n elif N=2 then\n x1:=substring(a1,1..2):x2:=substring(a1,4..5); \n p2:=procname(x2,a2,lname):\n S:=Cliff5[clibilinear](x1,p2,pro cname,lname);\n RETURN(simplify(S-coB*nameB[op(L)]*a2))\n fi;\n x :=cat(e,L[-1]);\n p1:=substring(a1,1..(3*N-4));\n p2:=procname(x,a2, lname):\n S:= Cliff5[clibilinear](p1,p2,procname,lname)\n -add(( -1)^(i)*coB*nameB[L[-i],L[-1]]*procname(\n Cliff5[makeclibas mon](subs(L[-i]=NULL,L[1..-2])),a2,lname),i=2..N); \n RETURN(Cliff5[r eorder](simplify(S)));\nend:\n" }}{PARA 0 "" 0 "" {TEXT 303 141 "No. \+ 32. Procedure 'cmulRS' computes Clifford product using Rota-Stein clif fordization technique. It can accept now -K in place of the name.\n" } }{PARA 0 "> " 0 "" {MPLTEXT 1 0 8657 "Cliff5[cmulRS]:=proc(a1,a2,lname )\n local max_grade,L1,N1,L2,N2,genPS,fun1,fun2,srt,cup,pList1,PN1,\n pList2,PN2,pSgn1,pSgn2,a,i,j,m,n,res,pos1,pos2,F1,F2,coB,nameB ;\n options `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfrie d Fauser. All rights reserved.`;\n#################################### ######################################################\n### This proce dure computes Clifford product of any two cliscalars, clibasmons, clim ons, #\n### and clipolynoms in Clifford algebras Cl(lname) using Rota- Sten cliffordization #\n### Procedure cmulRS modified by Rafal t o accept -K, or -B for lname. #\n################## ###################################################################### ##\n if nargs<>3 then ERROR(`exactly three arguments are needed`) fi: \n if has(0,map(simplify,[a1,a2])) then RETURN(0) fi;\n if a1 = `Id` then RETURN(a2) fi;\n if a2 = `Id` then RETURN(a1) fi;\n ########## ######\n ##### The following will allow for lname to be -B, for examp le:\n if type(lname,\{name,symbol,array,matrix\}) then\n coB,name B:=1,lname:\n elif type(lname,`&*`(numeric,\{name,symbol,array,matrix \})) then\n coB:=op(select(type,\{op(lname)\},numeric));\n nam eB:=op(select(type,\{op(lname)\},name));\n else\n ERROR(`lname is of unexpected type`)\n fi;\n ################\n L1:=Cliff5[extract ](a1,`integers`);\n N1:=nops(L1);\n L2:=Cliff5[extract](a2,`integers `);\n N2:=nops(L2);\n if N1 = 1 then \n RETURN(Cliff5[reorder](si mplify(Cliff5[makeclibasmon]([L1[1],op(L2)])\n +add((-1)^(i-1)*coB* nameB[L1[1],L2[i]]*\n Cliff5[makeclibasmon](subs(L2[i]=NULL,L2)),i =1..N2))));\n fi;\n if N2 = 1 then \n RETURN(Cliff5[reorder](simp lify(Cliff5[makeclibasmon]([op(L1),L2[1]])\n +add((-1)^(i-1)*coB*na meB[L1[-i],L2[1]]*\n Cliff5[makeclibasmon](subs(L1[-i]=NULL,L1)),i =1..N1))));\n fi;\n#### genPS ; generate a power set of 1..N, option \+ remember\n genPS:=proc(N)\n local a,i,plst;\n option remember; \+ \n a:=[seq(i,i=1..N)]:\n plst:=[a]:\n for i in a do\n pl st := [op(subs(i = NULL,plst)), op(plst)]:\n od:\n end:\n#### prep are combinatorics for L1:\n fun1:=proc(a1) option inline; a1 end:\n \+ for i from 1 to N1 do\n fun1(i):=L1[i];\n od:\n#### here is the ol d code for the poweset \n# a:=[seq(i,i=1..N1)]:\n# pList1:=[a]:\n# \+ for i in a do\n# pList1 := [op(subs(i = NULL,pList1)), op(pList1)]: \n# od:\n####\npList1:=genPS(N1); \n PN1:=nops(pList1)+1; ## added 1 here\n pList1:=sort(pList1,(a,b)->evalb(nops(a)<=nops(b)));\n pSg n1 :=[seq((-1)^(add(pList1[i][m]-m,m=1..nops(pList1[i]))),i=1..PN1-1)] ;\n#### prepare combinatorics for L2:\n fun2:=proc(a2) option inline; a2 end:\n for i from 1 to N2 do\n fun2(i):=L2[i];\n od:\n#### he re is the old code for the poweset \n# a:=[seq(i,i=1..N2)]:\n# pList 2:=[a]:\n# for i in a do\n# pList2 := [op(subs(i = NULL,pList2)), \+ op(pList2)]:\n# od:\n####\npList2:=genPS(N2);\n PN2:=nops(pList2)+1; ## added 1 here\n pList2:=sort(pList2,(a,b)->evalb(nops(a)<=nops(b) ));\n pSgn2:=[seq((-1)^(add(pList2[i][m]-m,m=1..nops(pList2[i]))),i=1 ..PN2-1)];\n#### cup tangle of the rota-stein sausage tangle\n cup:=p roc(lst1,lst2,coB,nameB)\n local i;\n options inline;\n if no ps(lst1)<>nops(lst2) then RETURN(0) fi;\n if lst1=[] then RETURN(1) fi;\n if nops(lst1)=1 then RETURN(coB*nameB[lst1[1],lst2[1]]) fi; \n add((-1)^(i-1)*coB*nameB[lst1[-1],lst2[i]]*\n cup(lst1[1 ..-2],subs(lst2[i]=NULL,lst2),coB,nameB)\n ,i=1..nops(lst2))\n \+ end:\n############################################################### #################### \n## Rota-Stein Tangle : cliffordization \+ #\n## compose only such terms whi ch are potentially non zero in the cup(..) tangle #\n################# ##################################################################\n \+ max_grade:=nops(\{op(L1),op(L2)\}); ## <== new code\n res:=0:\n pos 1:=0:\n for j from 0 to N1 do # for all j-vectors of pList1\n F1:=N 1!/((N1-j)!*j!);\n pos2:=0:\n for i from 0 to min(N2,max_grade-j) do # for all i-vectors of pList2\n \+ # which do not exceed max_grade (others are zero)\n F2:=N2!/((N2 -i)!*i!);\n for n from 1 to F1 do\n for m from 1 to F2 do \n \+ res:=res+\n pSgn1[pos1+n]*pSgn2[pos2+m]*\n cup(map(fun 1,pList1[PN1-pos1-n]),map(fun2,pList2[pos2+m]),coB,nameB)*\n C liff5[makeclibasmon]([op(map(fun1,pList1[pos1+n])),op(map(fun2,pList2[ PN2-pos2-m]))])\n od:od:\n pos2:=pos2+F2;\n od:\n pos1:=pos1 +F1;\n od: \n Cliff5[reorder](res); ## note that cmulRS INCLUDES alr eady reorder !!\nend:\n\n\ncmulRS:=proc(a1,a2,lname)\n local max_grad e,L1,N1,L2,N2,genPS,fun1,fun2,srt,cup,pList1,PN1,\n pList2,PN2, pSgn1,pSgn2,a,i,j,m,n,res,pos1,pos2,F1,F2;\n options `Copyright (c) 1 995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved .`;\n################################################################# #########################\n### This procedure computes Clifford produc t of any two cliscalars, clibasmons, climons, #\n### and clipolynoms i n Clifford algebras Cl(lname) using Rota-Sten cliffordization # \n### ORIGINAL procedure written by Bertfried. \+ #\n############################################## ############################################\n if nargs<>3 then ERROR (`exactly three arguments are needed`) fi:\n if has(0,map(simplify,[a 1,a2])) then RETURN(0) fi;\n if a1 = `Id` then RETURN(a2) fi;\n if a 2 = `Id` then RETURN(a1) fi;\n L1:=Cliff5[extract](a1,`integers`);\n \+ N1:=nops(L1);\n L2:=Cliff5[extract](a2,`integers`);\n N2:=nops(L2); \n if N1 = 1 then \n RETURN(Cliff5[reorder](simplify(Cliff5[makecl ibasmon]([L1[1],op(L2)])\n +add((-1)^(i-1)*lname[L1[1],L2[i]]*\n \+ Cliff5[makeclibasmon](subs(L2[i]=NULL,L2)),i=1..N2))));\n fi;\n if N2 = 1 then \n RETURN(Cliff5[reorder](simplify(Cliff5[makeclibasmo n]([op(L1),L2[1]])\n +add((-1)^(i-1)*lname[L1[-i],L2[1]]*\n Cli ff5[makeclibasmon](subs(L1[-i]=NULL,L1)),i=1..N1))));\n fi;\n#### gen PS ; generate a power set of 1..N, option remember\n genPS:=proc(N)\n local a,i,plst;\n option remember; \n a:=[seq(i,i=1..N)]:\n \+ plst:=[a]:\n for i in a do\n plst := [op(subs(i = NULL,plst )), op(plst)]:\n od:\n end:\n#### prepare combinatorics for L1:\n \+ fun1:=proc(a1) option inline; a1 end:\n for i from 1 to N1 do\n f un1(i):=L1[i];\n od:\n#### here is the old code for the poweset \n# \+ a:=[seq(i,i=1..N1)]:\n# pList1:=[a]:\n# for i in a do\n# pList1 : = [op(subs(i = NULL,pList1)), op(pList1)]:\n# od:\n####\npList1:=genP S(N1); \n PN1:=nops(pList1)+1; ## added 1 here\n pList1:=sort(pLis t1,(a,b)->evalb(nops(a)<=nops(b)));\n pSgn1 :=[seq((-1)^(add(pList1[i ][m]-m,m=1..nops(pList1[i]))),i=1..PN1-1)];\n#### prepare combinatoric s for L2:\n fun2:=proc(a2) option inline; a2 end:\n for i from 1 to \+ N2 do\n fun2(i):=L2[i];\n od:\n#### here is the old code for the p oweset \n# a:=[seq(i,i=1..N2)]:\n# pList2:=[a]:\n# for i in a do\n# pList2 := [op(subs(i = NULL,pList2)), op(pList2)]:\n# od:\n####\n pList2:=genPS(N2);\n PN2:=nops(pList2)+1; ## added 1 here\n pList2: =sort(pList2,(a,b)->evalb(nops(a)<=nops(b)));\n pSgn2:=[seq((-1)^(add (pList2[i][m]-m,m=1..nops(pList2[i]))),i=1..PN2-1)];\n#### cup tangle \+ of the rota-stein sausage tangle\n cup:=proc(lst1,lst2,lname)\n lo cal i;\n options inline;\n if nops(lst1)<>nops(lst2) then RETURN (0) fi;\n if lst1=[] then RETURN(1) fi;\n if nops(lst1)=1 then R ETURN(lname[lst1[1],lst2[1]]) fi;\n add((-1)^(i-1)*lname[lst1[-1],l st2[i]]*\n cup(lst1[1..-2],subs(lst2[i]=NULL,lst2),lname)\n \+ ,i=1..nops(lst2))\n end:\n###################################### ############################################# \n## Rota-Stein Tangle : cliffordization #\n## co mpose only such terms which are potentially non zero in the cup(..) ta ngle #\n############################################################## #####################\n max_grade:=nops(\{op(L1),op(L2)\}); ## <== n ew code\n res:=0:\n pos1:=0:\n for j from 0 to N1 do # for all j-v ectors of pList1\n F1:=N1!/((N1-j)!*j!);\n pos2:=0:\n for i from 0 \+ to min(N2,max_grade-j) do # for all i-vectors of pList2\n \+ # which do not exceed max_grade (others \+ are zero)\n F2:=N2!/((N2-i)!*i!);\n for n from 1 to F1 do\n for m from 1 to F2 do \n res:=res+\n pSgn1[pos1+n]*pSgn2[pos2+ m]*\n cup(map(fun1,pList1[PN1-pos1-n]),map(fun2,pList2[pos2+m] ),lname)*\n Cliff5[makeclibasmon]([op(map(fun1,pList1[pos1+n]) ),op(map(fun2,pList2[PN2-pos2-m]))])\n od:od:\n pos2:=pos2+F2;\n od:\n pos1:=pos1+F1;\n od: \n Cliff5[reorder](res); ## note tha t cmulRS INCLUDES already reorder !!\nend:\n" }}{PARA 0 "" 0 "" {TEXT 304 75 "No. 33. Procedure 'cmulgen' is just a place holder for a Clif ford product." }{TEXT -1 1 "\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 461 " Cliff5[cmulgen]:=proc() global _default_Clifford_product,_warnings_fla g;\n options `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfri ed Fauser. All rights reserved.`;\nif _default_Clifford_product <> 'cm ulgen' then\n RETURN(_default_Clifford_product(args))\nelse \n if \+ _warnings_flag then\n WARNING(`to assign Clifford product, execute ' useproduct' with argument cmulRS, cmulNUM, or cmul_user_defined first` );\n fi;\n RETURN('cmulgen'(args))\nfi; \nend:\n" }}{PARA 0 "" 0 " " {TEXT 305 114 "No. 34. Wrapper function for the Clifford product giv en by cmulNUM, cmulRS, or other procedure such as 'cmulgen'.\n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 1586 "Cliff5[cmul]:=proc() local lname; \n options `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n if type(op(procname),procedure) the n\n lname:=`B`;\n else\n lname:=op(procname);\n fi;\n if memb er(0,[args]) then RETURN(0) fi;\n if nargs <=1 then RETURN(args) fi; \n if nargs = 2 then\n############################################### ###########\n### Speed-wise it makes no difference whether cmulgen or \+ #\n### _default_Clifford_product is used in the following. # ######## ##################################################\n #RETURN(Cliff 5[clicollect](Cliff5[clibilinear](eval(args[1]),eval(args[2]),\n # _default_Clifford_product,lname)))\n RETURN(Cliff5[clicolle ct](Cliff5[clibilinear](eval(args[1]),eval(args[2]),\n cmul gen,lname))) \n fi;\n###### <=== do NOT use 'procname' in the next li ne this will not work\n############################################### ###########\n### Speed-wise it makes no difference whether cmulgen or \+ #\n### _default_Clifford_product is used in the following. # ######## ##################################################\nif not type(_defau lt_Clifford_product,procedure) then \n ERROR(`global variable _defau lt_Clifford_product must be assigned a procedure so that 'cmul' can pr oceed beyond this point. Sorry. For help see ?cmul.`) \nfi;\n #RET URN(procname(Cliff5[clibilinear](eval(args[1]),eval(args[2]),\n # \+ _default_Clifford_product,lname),args[3..-1]));\n RETURN(pro cname(Cliff5[clibilinear](eval(args[1]),eval(args[2]),\n cm ulgen,lname),args[3..-1])); \nend:\n" }}{PARA 0 "" 0 "" {TEXT 307 225 "No. 35: Ampersand version of 'cmul'. This version of `&c` cor rectly uses -K for index. When K has been assigned a matrix, use\n&c[' 'K''](e1,e2) and &c[''-K''](e1,e2). Otherwise, use &c[K](e1,e2), &c[-K ](e1,e2), or &c(e1,e2). \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 2104 "Cli ff5[`&c`]:=proc() local NP,ARGS,coB,nameB,lname,decindex,flagdec;\n### ####################################\n### Works when &c[''K''] or &c[' '-K''] is entered and K is a matrix\n################################# ######\nflagdec:=true:\nif type(op(procname),procedure) then\n if ty pe([args],listlist) then\n if type(op(args),array) then\n \+ WARNING(`enclose index in double quotes as in &c[''B''] or &c[''-B''] when B has been assigned a matrix to avoid the following:`);\n \+ RETURN('procname(args)');\n fi;\n else coB:=1:\n nameB:=`B `:\n lname:=`B`:\n ARGS:=[args]:\n flagdec:=false:\n fi;\nelse lname:=op(procname);\n ARGS:=[args];\n if type(lna me,`&*`(numeric,name)) then\n coB:=op(select(type,\{op(lname) \},numeric));\n nameB:=op(select(type,\{op(lname)\},name));\n \+ else\n coB:=1:\n nameB:=lname:\n fi;\n fla gdec:=false:\nfi;\n#######################################\ndecindex:= proc() local ARGS,coB,nameB;global B;\nif type([args],listlist) then\n if type(op(args),function) then\n ARGS:=op(op(args));\n c oB:=1:\n nameB:=eval(op(0,op(args)));\n if type(nameB,`&*`(n umeric,name)) then\n coB:=op(select(type,\{op(nameB)\},numeric ));\n nameB:=op(select(type,\{op(nameB)\},name));\n fi;\n elif type(op(args),`&*`(numeric,function)) then\n nameB:=\{op( op(args))\}:\n coB:=op(select(type,nameB,numeric));\n nameB: =op(select(type,nameB,function));\n ARGS:=op(nameB);\n nameB :=op(0,nameB);\n else\n ERROR(`unable to determine index from o r wrong index, use name in double quotes as in &c[''B''] or &c[''-B''] `)\n fi;\nelif\n type([args],list) then\n ARGS:=args;\n coB:=1 :\n nameB:=`B`; #default name \nelse\n ERROR(`cannot determine arg uments and/or index from:`,args)\nfi;\nRETURN(coB,nameB,[ARGS]);\nend: \n#####################################\nif flagdec then \n coB,name B,ARGS:=decindex(args);\n lname:=coB*nameB;\nfi;\n#RETURN(coB,nameB, lname,ARGS);\nNP:=nops(ARGS);\nif member(0,ARGS) then RETURN(0) fi;\ni f NP <=1 then RETURN(op(ARGS)) fi;\nRETURN(cmul[eval(lname)](op(ARGS)) ); \nend:\n" }}{PARA 0 "" 0 "" {TEXT 308 98 "No. 36. Procedure that al lows user to select which procedure is used to compute Clifford produc t.\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1210 "Cliff5[useproduct]:=proc( name::\{symbol,name\})\n local wstr;global _default_Clifford_product, cmulRS,cmulNUM,cmulgen;\noptions `Copyright (c) 1995-2002 by Rafal Abl amowicz and Bertfried Fauser. All rights reserved.`;\n################ ###################################################\n###This procedure uses global variable _default_Clifford_product #\n################## ################################################# \n if not member(na me,\{'cmulRS','cmulNUM','cmulgen','cmul_user_defined'\}) then \n WA RNING(`expecting one of the followinng Clifford products: 'cmulRS', 'c mulNUM', 'cmulgen', or 'cmul_user_defined'`) \n fi;\nif member(name, \{'cmul_user_defined'\}) and not type(name,procedure) then\n WARNING (`no computations with 'cmul' can be peformed yet since 'cmul_user_def ined' has not been defined as procedure. Select 'cmulRS', 'cmulNUM', o r a new procedure as argument to 'useproduct'.`);\n _default_Cliffor d_product:=name;\n RETURN(NULL);\nfi;\n############################# ###\n_default_Clifford_product:=name; #change value of _default_Cliffo rd_product \n################################\nwstr:=cat(\"cmul will u se \",name,\"; for help see pages ?cmul, ?Cliff5[intro], or ?\",name); \n WARNING(wstr);\nend:\n" }}{PARA 500 "" 0 "" {TEXT -1 564 "No. 37. \+ Procedure 'cmulQ' and its infix form '&cQ' is a special version of 'cm ul' and '&c'. It gives the Clifford multiplication in the Clifford al gebra of the quadratic form Q related to the symmetric part g of B as \+ Q(x) = g(x, x) = B(x, x) where B = g + A (A is the alternating part of B). Like 'cmul', it works now in all dimensions 1 through 9. Via th e procedure 'rmulm' described below in (32), this multiplication can a lso be applied to matrices with entries in a Clifford algebra.\n\nThis procedure can now accept an optional index which could be K or -K. " }}{PARA 501 "" 0 "" {TEXT -1 0 "" }}{PARA 502 "" 0 "" {TEXT -1 78 "Pro posed by Yvon Siret, Universite Joseph Fourier , Grenoble, France. Th anks!" }}{PARA 503 "" 0 "" {TEXT -1 0 "" }}{PARA 504 "" 0 "" {TEXT -1 156 "Typical use: cmulQ(e1 + e2 + 2*Id, e3we4 + e6); or (e1 + e2) &cQ \+ (2*e2we3 + e4); or &cQ(e1, e2, e3); \n cmulQ(e1we 2+e2,e3+e4,e5-Pi*Id); " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 1304 "Cliff5[cmulQ]:=proc() local ii,N,L,m,Sxy,sym bxy,lname,coB,nameB;global B:\noptions `Copyright (c) 1995-2002 by Raf al Ablamowicz and Bertfried Fauser. All rights reserved.`;\n########## ##########################\nif type(op(procname),procedure) then\n \+ lname:=`B`;\n else\n lname:=op(procname);\n fi;\n################ ####################\nif member(0,[args]) then RETURN(0) fi;\n######## ############################\nSxy:=map(op,map(cliterms,\{args\}));\nSx y:=map(op,map(Cliff5[extract],Sxy,'integers'));\nsymbxy:=remove(type,S xy,posint);\nif symbxy <> \{\} then \n RETURN(cmul[lname](args)) \nf i;\nm:=max(op(Sxy),1);# 1 is needed when both x and y have maxindex=0 \nif type(evalm(lname),matrix) then \n N:=linalg[coldim](evalm(lname )):\n if m>N then ERROR(`input contains index larger than size of bi linear form`,lname) fi:\nfi:\n################################\nif typ e(lname,\{name,symbol,array,matrix\}) then\n L:=seq(lname[ii,ii],ii= 1..m);\n RETURN(cmul[linalg[diag](L)](args));\nelif \n type(lname, `&*`(numeric,\{name,symbol,array,matrix\})) then\n coB:=op(select(ty pe,\{op(lname)\},numeric));\n nameB:=op(select(type,\{op(lname)\},\{ name,symbol,array,matrix\}));\n L:=seq(coB*nameB[ii,ii],ii=1..m);\n \+ RETURN(cmul[linalg[diag](L)](args)); \nelse\n ERROR(`index of une xpected type has been found in cmulQ`)\nfi;\nend:\n" }}{PARA 0 "" 0 " " {TEXT 309 221 "No. 38. Ampersand version of 'cmulQ'. This version ca n accept index B and -B. When B has been defined as matrix, use\n&cQ[' 'B''](e1,e2) and &cQ[''-B''](e1,e2) . Otherwise, use &cQ[B](e1,e2), &c Q[-B](e1,e2) or &cQ(e1,e2). \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 2112 "Cliff5[`&cQ`]:=proc() local NP,ARGS,coB,nameB,lname,decindex,flagdec; \n#######################################\n### Works when &cQ[''K''] o r &cQ[''-K''] is entered and K is a matrix\n########################## #############\nflagdec:=true:\nif type(op(procname),procedure) then\n \+ if type([args],listlist) then\n if type(op(args),array) then\n \+ WARNING(`enclose index in double quotes as in &cQ[''B''] or &c Q[''-B''] when B has been assigned a matrix to avoid the following:`); \n RETURN('procname(args)');\n fi;\n else coB:=1:\n \+ nameB:=`B`:\n lname:=`B`:\n ARGS:=[args]:\n flagdec: =false:\n fi;\nelse lname:=op(procname);\n ARGS:=[args];\n if type(lname,`&*`(numeric,name)) then\n coB:=op(select(type,\{o p(lname)\},numeric));\n nameB:=op(select(type,\{op(lname)\},na me));\n else\n coB:=1:\n nameB:=lname:\n fi;\n flagdec:=false:\nfi;\n#######################################\nde cindex:=proc() local ARGS,coB,nameB;global B;\nif type([args],listlist ) then\n if type(op(args),function) then\n ARGS:=op(op(args)); \n coB:=1:\n nameB:=eval(op(0,op(args)));\n if type(nam eB,`&*`(numeric,name)) then\n coB:=op(select(type,\{op(nameB) \},numeric));\n nameB:=op(select(type,\{op(nameB)\},name));\n \+ fi;\n elif type(op(args),`&*`(numeric,function)) then\n na meB:=\{op(op(args))\}:\n coB:=op(select(type,nameB,numeric));\n \+ nameB:=op(select(type,nameB,function));\n ARGS:=op(nameB);\n \+ nameB:=op(0,nameB);\n else\n ERROR(`unable to determine in dex from or wrong index, use name in double quotes as in &cQ[''B''] or &cQ[''-B'']`)\n fi;\nelif\n type([args],list) then\n ARGS:=args ;\n coB:=1:\n nameB:=`B`; #default name \nelse\n ERROR(`cannot d etermine arguments and/or index from:`,args)\nfi;\nRETURN(coB,nameB,[A RGS]);\nend:\n#####################################\nif flagdec then \+ \n coB,nameB,ARGS:=decindex(args);\n lname:=coB*nameB;\nfi;\n#RETU RN(coB,nameB,lname,ARGS);\nNP:=nops(ARGS);\nif member(0,ARGS) then RET URN(0) fi;\nif NP <=1 then RETURN(op(ARGS)) fi;\nRETURN(cmulQ[eval(lna me)](op(ARGS))); \nend:\n" }}{PARA 497 "" 0 "" {TEXT -1 167 "No. 39. P rocedure 'scalarpart' computes the scalar part of the given Clifford p olynomial. For example, scalarpart(e1 + e2we3) = 0 but scalarpart(2* Id + e2we3) = 2. " }}{PARA 498 "" 0 "" {TEXT -1 0 "" }}{PARA 499 "" 0 "" {TEXT -1 46 "Typical use: scalarpart(2*Id + e1 + e1we2); \n" }} {PARA 0 "> " 0 "" {MPLTEXT 1 0 300 "Cliff5[scalarpart]:=proc(a1::\{cli scalar,clibasmon,climon,clipolynom\}) local p; \noptions `Copyright (c ) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reser ved.`;\n#verified with maplemint\nif type(a1,'cliscalar') then RETURN( a1) fi;\np:=Cliff5[clicollect](a1):\nRETURN(coeff(p,Id));\nend:\n" }} {PARA 494 "" 0 "" {TEXT -1 383 "No. 40. Procedure 'vectorpart' compute s the k-vector part of the given Clifford polynomial u where k is a no nnegative integer. For example, vectorpart(e1 + 3*e2we3, 2) = 3*e2we3. When k = 0 then the procedure returns the scalar part of u times 'Id ', e.g., vectorpart(2*Id + 3*e2we3, 0) = 2*Id. Note that vectorpart(2 *Id + e1we2, 0) equals 2*Id while scalarpart(2*Id + e1we2) = 2. " }} {PARA 495 "" 0 "" {TEXT -1 0 "" }}{PARA 496 "" 0 "" {TEXT -1 47 "Typic al use: vectorpart(e1 + e2we3 + e3, 1); \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 493 "Cliff5[vectorpart]:=proc(a1::\{cliscalar,clibasmon,c limon,clipolynom\},a2::nonnegint) \nlocal p,K;\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserv ed.`;\n#verified with maplemint\nif Cliff5[maxgrade](a1) < a2 then RET URN(0) fi;\n K:=proc() if Cliff5[maxgrade](args[1])=a2 then true els e false fi end:\nif type(a1,`+`) then p:=select(K,a1) elif\n Cliff5[ maxgrade](a1)<>a2 then p:=NULL else \n p:=a1 \nfi;\nif p=NULL then R ETURN(0) else RETURN(p) fi;\nend:\n" }}{PARA 491 "" 0 "" {TEXT -1 260 "No. 41. Procedure 'cexp' computes Clifford exponential of a Clifford \+ number in Cl(B) up to the order specified by the second argument whic h is a nonnegative integer n. It n = 0 then this procedure returns 'Id '. It can accept another argument such as B or -B. " }}{PARA 492 "" 0 "" {TEXT -1 0 "" }}{PARA 493 "" 0 "" {TEXT -1 185 "Typical use: cexp(e 1we2*t, 3);cexp(e1we2*t, 3,K);\n cexp((e1 + e1we2) *t, 4); cexp((e1 + e1we2)*t, 4,-K); \n cexp(e1we2, 3); cexp(e1 + e1we2, 4,K);\n" }}{PARA 589 "> " 0 "" {MPLTEXT 1 0 1251 "Cliff5[cexp]:=proc(p::\{numeric,cliscalar,clibasmon,climon,clipo lynom\},N::nonnegint) \nlocal pp,k,ans,ans1,ans2,lname,coB,nameB;\nopt ions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser . All rights reserved.`;\n#verified with maplemint\n################## ############## \nif nargs=2 then\n coB:=1:\n nameB:=`B`: \n \+ lname:=`B`: \nelif nargs=3 then\n if type(args[3],\{name,symbol,mat rix,array\}) then\n coB:=1:\n nameB:=args[3];\n lnam e:=args[3];\n elif type(args[3],`&*`(numeric,\{name,symbol,matrix,a rray\})) then\n coB:=op(select(type,\{op(args[3])\},numeric));\n nameB:=op(remove(type,\{op(args[3])\},numeric));\n lname: =args[3]:\n else \n ERROR(`wrong type of third argument in ce xp`) \n fi;\nelse\n ERROR(`two or three arguments expected in cexp `):\nfi;\n################################\nk:='k':\nif type(p,\{numer ic,'cliscalar'\}) then RETURN(add(p^k/k!,k=0..N)) fi;\nif evalb(vector part(p,0)=p) then \n pp:=scalarpart(p);\n RETURN((add(pp^k/k!,k=0. .N)*Id)) \nfi;\npp:=Cliff5[clisort](Cliff5[displayid](p)):\nif N=0 the n RETURN(Id) \n elif N=1 then RETURN(Id+pp) \n else \nans1:=cexp (pp,N-1,lname);\nans2:=cexp(pp,N-2,lname);\nans:=ans1+cmul[lname](((an s1-ans2)*(N-1)!),pp)/N!;\nRETURN(ans)\nfi;\nend:\n" }}{PARA 488 "" 0 " " {TEXT -1 282 "No. 42. Procedure 'cexpQ' computes Clifford exponentia l of a Clifford number in Cl(Q) up to the order specified by the seco nd argument which is a nonnegative integer n. It n = 0 then this proce dure returns 'Id'. This procedure can also accept an optional argumen t such as B or -B." }}{PARA 489 "" 0 "" {TEXT -1 0 "" }}{PARA 490 "" 0 "" {TEXT -1 210 "Typical use: cexpQ(e1we2*t, 3); or cexpQ((e1 + 2*e1 we2)*t, 4);\n cexpQ(e1we2*t, 3,K); or cexpQ((e1 + \+ 2*e1we2)*t, 4,K);\n cexpQ(Id+2*e1we3,4); or cexpQ( e1 + 2*e1we2, 4,-K);\n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 1259 "Cliff5[ cexpQ]:=proc(p::\{numeric,cliscalar,clibasmon,climon,clipolynom\},N::n onnegint) \nlocal pp,k,ans,ans1,ans2,lname,coB,nameB;\noptions `Copyri ght (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n#verified with maplemint\n############################## ######\nif nargs=2 then\n coB:=1:\n nameB:=`B`: \n lname:=`B` : \nelif nargs=3 then\n if type(args[3],\{name,symbol,matrix,array \}) then\n coB:=1:\n nameB:=args[3];\n lname:=args[3 ];\n elif type(args[3],`&*`(numeric,\{name,symbol,matrix,array\})) \+ then\n coB:=op(select(type,\{op(args[3])\},numeric));\n na meB:=op(remove(type,\{op(args[3])\},numeric));\n lname:=args[3]: \n else \n ERROR(`wrong type of third argument in cexpQ`) \n \+ fi;\nelse\n ERROR(`two or three arguments expected in cexpQ`):\nfi ;\n################################\nk:='k':\nif type(p,\{numeric,'cli scalar'\}) then RETURN(add(p^k/k!,k=0..N)) fi;\nif evalb(vectorpart(p, 0)=p) then \n pp:=scalarpart(p);\n RETURN((add(pp^k/k!,k=0..N)*Id) ) \nfi;\npp:=Cliff5[clisort](Cliff5[displayid](p)):\nif N=0 then RETUR N(Id) \n elif N=1 then RETURN(Id+pp) \n else \nans1:=cexpQ(pp,N- 1,lname);\nans2:=cexpQ(pp,N-2,lname);\nans:=ans1+cmulQ[lname](((ans1-a ns2)*(N-1)!),pp)/N!;\nRETURN(ans)\nfi;\nend:\n" }}{PARA 485 "" 0 "" {TEXT -1 192 "No. 43. Procedure 'wexp' computes exterior exponential o f a Clifford number u up to the order specified by the second argumen t which is a nonnegative integer n. It returns 'Id' when n = 0. " }} {PARA 486 "" 0 "" {TEXT -1 0 "" }}{PARA 487 "" 0 "" {TEXT -1 38 "Typic al use: wexp(e1we2 + e3we4, 5); \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 566 "Cliff5[wexp]:= proc(p::\{cliscalar,clibasmon,climon,clipolynom\}, N::nonneg) \nlocal pp,power,cu,i;\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n#verif ied with maplemint\n if nargs<>2 then ERROR(\"two parameters are need ed in 'wexp' \") fi;\n pp:=expand(p);\n if N=0 then RETURN(1) elif\n N=1 then RETURN(1+Cliff5[clisort](pp)) fi;\n power:=pp;\n cu:=1 +pp;\n for i from 2 to N do\n power:=Cliff5[wedge](power,pp);\n \+ cu:=cu + power/i!;\n od;\n RETURN(subs(Id=1,Cliff5[clicollect](Cl iff5[clisort](cu))));\n end:\n" }}{PARA 482 "" 0 "" {TEXT -1 440 "No. 44. Procedure 'reversion' calculates reversion in the Clifford algebr a. It is linear in its argument and it is always a Clifford algebra an ti-automorphism. When the antisymmetric part of B is not zero, 'rever sion' does not preserve the multilinear structure of the algebra becau se it mixes grades, i.e., it does not preserve the gradation of the ex terior algebra. This procedure can now take a third optional argument such as B or -B." }}{PARA 483 "" 0 "" {TEXT -1 0 "" }}{PARA 484 "" 0 "" {TEXT -1 53 "Typical use: reversion(2*e1we2 + 4*Id - e3we4we5); \n " }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 2605 "Cliff5[reversion]:=proc(a1:: \{cliscalar,clibasmon,climon,clipolynom,matrix\}) \n \+ local ind,expr,wtp,ptw,lname,flagindexed;\n \+ global _scalartypes,B;\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Fauser. All rights reserved.`;\n#verif ied with maplemint\nif hastype([args[1]],'cliprod') then \n ERROR(\" in order to handle 'type/cliprod', load in package Cli5plus\") \nfi;\n ############################\nif type(a1,cliscalar) then RETURN(a1) fi ;\n############################\nif nargs=1 then\n lname:=`B`;\n \+ flagindexed:=false:\nelif nargs=2 and type(args[2],\{symbol,name,arra y,matrix,`&*`(algebraic,name)\}) then\n lname:=args[2];\n flagin dexed:=true:\nelse ERROR(`only one or two arguments are expected`);\nf i;\n############################\n### Auxiliary function that converts wedges to Clifford products: wedge ->> Clifford product\n############ ################\nwtp:=proc(a1,lname) local ind,i,arg,rdmon,eq1,ans; g lobal _scalartypes; \nif type(a1,\{`+`,`*`\}) then RETURN(map(wtp,a1 ,lname)) \n elif type(a1,_scalartypes) then RETURN(a1)\n elif type (a1,symbol) and SearchText(w,a1)=0 then RETURN(a1)\n elif type(a1,sy mbol) and not member(length(a1),\{5,8,11,14,17,20,23,26\}) \n t hen RETURN(a1) \nfi;\nrdmon:=Cliff5[reorder](a1):\nind:=Cliff5[extract ](a1,'integers'):\ni:='i':\narg:=[seq(cat(e,op(ind[i])),i=1..nops(ind) )];\neq1:=cat(op(arg))=simplify(eval(cmul[lname](op(arg))));\nif a1=rd mon then ans:=simplify(solve(eq1,a1)) \n else ans:=-simplif y(solve(-eq1,-rdmon)) \nfi;\nif nops(ind) < 4 then RETURN(ans) else RETURN(wtp(ans,lname)) fi;\nend:\n############################\n### A uxiliary function that converts Clifford products to wedge: Clifford p roducts ->> wedge\n############################\nptw:=proc(a1,lname) l ocal i,arg,revarg; global _scalartypes; \nif type(a1,\{`+`,`*`\}) then RETURN(map(ptw,a1,lname)) \n elif type(a1,_scalartypes) then RETURN (a1) \n elif type(a1,symbol) and SearchText(e,a1)=0 then RETURN(a1) \+ \n elif type(a1,symbol) and length(a1)=2 then RETURN(a1) \n elif t ype(a1,symbol) and not member(length(a1),\{2,4,6,8,10,12,14,16,18\})\n then RETURN(a1) \nfi;\ni:='i':\narg:=[seq(cat(e,substring(a1,2 *i..2*i)),i=1..(length(a1)/2))];\nrevarg:=[seq(arg[nops(arg)-i],i=0..( nops(arg)-1))];\nRETURN(expand(eval(cmul[lname](op(revarg)))))\nend:\n ##############################\n### Now the actual function:\n######## ######################\nif type(a1,matrix) then RETURN(map(reversion,a 1,lname)) fi;\nexpr:=ptw(expand(wtp(a1,lname)),lname);\nexpr:=expand(C liff5[displayid](expr)):\nRETURN(Cliff5[clisort](expr));\nend:\n" }} {PARA 479 "" 0 "" {TEXT -1 348 "No. 45. Procedure 'conjugation' calcul ates conjugation in the Clifford algebra. It is linear in its argument . Note that 'conjugation' is defined as a composition of 'reversion' \+ and 'gradeinv'. Hence, it does not preserve the multivector gradation when the antisymmetric part of B is non-zero. It can now accept opti onal argument such as B or -B." }}{PARA 480 "" 0 "" {TEXT -1 0 "" }} {PARA 481 "" 0 "" {TEXT -1 41 "Typical use: conjugation(e1 + 4*e2we3); " }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 821 "Cliff5[conjugation]:=proc(a1::algebraic) local lname;global B;\no ptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Bertfried Faus er. All rights reserved.`;\n############################\nif nargs=1 t hen\n lname:=`B`;\nelif nargs=2 and type(args[2],\n \{symbol,na me,array,matrix,`&*`(numeric,\{symbol,name,array,matrix\})\}) then\n \+ lname:=args[2];\nelse ERROR(`only one or two arguments are expected` );\nfi;\n############################\n#verified with maplemint\nif ty pe(a1,matrix) then RETURN(map(procname,a1,lname)) elif\n type(a1,'cl iscalar') then RETURN(a1) elif\n type(a1,\{'clibasmon','climon','cli polynom'\}) then RETURN(eval(Cliff5[gradeinv](Cliff5[reversi on](a1,lname))))\nelse \n ERROR(\"wrong input type: input must be of type 'cliscalar', 'clibasmon', 'climon', 'clipolynom', or 'matrix'\") \nfi;\nend:" }}{PARA 0 "" 0 "" {TEXT -1 0 "" }}{PARA 474 "" 0 "" {TEXT -1 100 "No. 46. Procedure 'c_conjug' calculates complex conjugat e in a complexified Clifford algebra; thus, " }}{PARA 475 "" 0 "" {TEXT -1 80 " c_conjug(u) = c_conjug (a + I*b) = a - I*b " }}{PARA 476 "" 0 "" {TEXT -1 140 "where a and b are in the real Clifford algebra and `I` is the imaginary unit, i.e ., I = sqrt(-1). This procedure is linear in its argument. " }}{PARA 477 "" 0 "" {TEXT -1 0 "" }}{PARA 478 "" 0 "" {TEXT -1 51 "Typical use : c_conjug((1 + 2*I)*e1 - 3*I*e1we2); \n" }}{PARA 0 "> " 0 "" {MPLTEXT 1 0 665 "Cliff5[c_conjug]:=proc(a1::algebraic) local ba,co,te rms,t,i;\noptions `Copyright (c) 1995-2002 by Rafal Ablamowicz and Ber tfried Fauser. All rights reserved.`;\n#verified with maplemint\nif ty pe(a1,matrix) then RETURN(map(procname,a1)) elif\n type(a1,'cliscala r') then RETURN(conjugate(a1)) elif\n type(a1,\{'clibasmon','climon' ,'clipolynom'\}) then\n t:='t':\n ba:=Cliff5[cliterms](a 1);\n co:=[coeffs(a1,ba,'t')];\n terms:=[t];i:='i':\n \+ RETURN(Cliff5[clisort](add(conjugate(co[i])*terms[i],i=1..nops(co ))))\n else \nERROR(\"wrong input type: input must be of type 'clisc alar', 'clibasmon', 'climon', 'clipolynom', or 'matrix'\") \nfi;\nend: \n" }}{PARA 471 "" 0 "" {TEXT -1 889 "No. 47. Procedure 'buildm' build s a matrix for the given element u of the Clifford algebra Cl(B) in th e left- or right-regular representation, or under Lie or automorphism \+ action with respect to an ordered basis specified by the user. The el ement p is entered as the first argument and the basis in the form of \+ a list is specified as the second argument, e.g., buildm(u, basis). I t is also possible to specify options 'left', 'right', 'Lie', 'auto', \+ 'false, and 'true'. For example, one can find the left-re