Changeset 177

Show
Ignore:
Timestamp:
01/03/08 15:30:15 (4 years ago)
Author:
BCS
Message:

More rules! If I haven't dropped a file in there somewhere this will now handle most single variable linear problems.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/backmath/backmath.d

    r176 r177  
    414414    Z = (B * A) + (B / C); 
    415415    Z = (B / A) + (B / C); 
    416 
     416 
     417    Z = B + (B*A + D); 
     418    Z = B + (B/A + D); 
     419    Z = B + (B*A - D); 
     420    Z = B + (B/A - D); 
     421    Z = B - (B*A + D); 
     422    Z = B - (B/A + D); 
     423    Z = B - (B*A - D); 
     424    Z = B - (B/A - D); 
     425 
     426
  • trunk/backmath/generated_rules.d

    r176 r177  
    325325        alias OpDivA!(Value!(2), OpAddA!(OpDiv!(T.LHS, Value!(2)), T.RHS)) TypeOfAdd; 
    326326    else 
     327    static if( /+ (+ C (/> A (-> B X))) -> (/> A (-> (+ (/ C A) B) X)) +/ 
     328        is(T.DefP == Defined) && 
     329        is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     330         /+ no repeats +/ 
     331        )  
     332        alias OpDivA!(V.LHS, OpSubA!(OpAdd!(OpDiv!(T, V.LHS), V.RHS.LHS), V.RHS.RHS)) TypeOfAdd; 
     333    else 
     334    static if( /+ (+ X (/> F (-> E X))) -> (/> (+ 1 F) (-> (/ (* E F) (+ 1 F)) X)) +/ 
     335        is(T.DefP == UnDefined) && 
     336        is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     337         && is(T == V.RHS.RHS) 
     338        )  
     339        alias OpDivA!(OpAdd!(Value!(1), V.LHS), OpSubA!(OpDiv!(OpMul!(V.RHS.LHS, V.LHS), OpAdd!(Value!(1), V.LHS)), T)) TypeOfAdd; 
     340    else 
     341    static if( /+ (+ C (/> A (+> B X))) -> (/> A (+> (- B (/ C A)) X)) +/ 
     342        is(T.DefP == Defined) && 
     343        is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     344         /+ no repeats +/ 
     345        )  
     346        alias OpDivA!(V.LHS, OpAddA!(OpSub!(V.RHS.LHS, OpDiv!(T, V.LHS)), V.RHS.RHS)) TypeOfAdd; 
     347    else 
     348    static if( /+ (+ X (/> F (+> E X))) -> (/> (+ 1 F) (+> (/ (* E F) (+ 1 F)) X)) +/ 
     349        is(T.DefP == UnDefined) && 
     350        is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     351         && is(T == V.RHS.RHS) 
     352        )  
     353        alias OpDivA!(OpAdd!(Value!(1), V.LHS), OpAddA!(OpDiv!(OpMul!(V.RHS.LHS, V.LHS), OpAdd!(Value!(1), V.LHS)), T)) TypeOfAdd; 
     354    else 
     355    static if( /+ (+ C (*> A (-> B X))) -> (*> A (-> (+ (* C A) B) X)) +/ 
     356        is(T.DefP == Defined) && 
     357        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     358         /+ no repeats +/ 
     359        )  
     360        alias OpMulA!(V.LHS, OpSubA!(OpAdd!(OpMul!(T, V.LHS), V.RHS.LHS), V.RHS.RHS)) TypeOfAdd; 
     361    else 
     362    static if( /+ (+ X (*> F (-> E X))) -> (/> (+ 1 (/ 1 F)) (-> (/ (/ E F) (+ 1 (/ 1 F))) X)) +/ 
     363        is(T.DefP == UnDefined) && 
     364        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     365         && is(T == V.RHS.RHS) 
     366        )  
     367        alias OpDivA!(OpAdd!(Value!(1), OpDiv!(Value!(1), V.LHS)), OpSubA!(OpDiv!(OpDiv!(V.RHS.LHS, V.LHS), OpAdd!(Value!(1), OpDiv!(Value!(1), V.LHS))), T)) TypeOfAdd; 
     368    else 
     369    static if( /+ (+ C (*> A (+> B X))) -> (*> A (+> (- B (* C A)) X)) +/ 
     370        is(T.DefP == Defined) && 
     371        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     372         /+ no repeats +/ 
     373        )  
     374        alias OpMulA!(V.LHS, OpAddA!(OpSub!(V.RHS.LHS, OpMul!(T, V.LHS)), V.RHS.RHS)) TypeOfAdd; 
     375    else 
     376    static if( /+ (+ X (*> F (+> E X))) -> (/> (+ 1 (/ 1 F)) (+> (/ (/ E F) (+ 1 (/ 1 F))) X)) +/ 
     377        is(T.DefP == UnDefined) && 
     378        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     379         && is(T == V.RHS.RHS) 
     380        )  
     381        alias OpDivA!(OpAdd!(Value!(1), OpDiv!(Value!(1), V.LHS)), OpAddA!(OpDiv!(OpDiv!(V.RHS.LHS, V.LHS), OpAdd!(Value!(1), OpDiv!(Value!(1), V.LHS))), T)) TypeOfAdd; 
     382    else 
    327383    static if( /+ (+ C (/> A (-R> B X))) -> (/> A (-R> (+ B (/ C A)) X)) +/ 
    328384        is(T.DefP == Defined) && 
     
    332388        alias OpDivA!(V.LHS, OpSubAR!(OpAdd!(V.RHS.LHS, OpDiv!(T, V.LHS)), V.RHS.RHS)) TypeOfAdd; 
    333389    else 
    334     static if( /+ (+ C (/> A (+> B X))) -> (/> A (+> (- B (/ C A)) X)) +/ 
    335         is(T.DefP == Defined) && 
    336         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
    337          /+ no repeats +/ 
    338         )  
    339         alias OpDivA!(V.LHS, OpAddA!(OpSub!(V.RHS.LHS, OpDiv!(T, V.LHS)), V.RHS.RHS)) TypeOfAdd; 
    340     else 
    341     static if( /+ (+ C (/> A (-> B X))) -> (/> A (-> (+ (/ C A) B) X)) +/ 
    342         is(T.DefP == Defined) && 
    343         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
    344          /+ no repeats +/ 
    345         )  
    346         alias OpDivA!(V.LHS, OpSubA!(OpAdd!(OpDiv!(T, V.LHS), V.RHS.LHS), V.RHS.RHS)) TypeOfAdd; 
    347     else 
    348390    static if( /+ (+ A (/> B X)) -> (/> B (-> (/ A B) X)) +/ 
    349391        is(T.DefP == Defined) && 
     
    366408        )  
    367409        alias OpMulA!(V.LHS, OpSubAR!(OpAdd!(V.RHS.LHS, OpMul!(T, V.LHS)), V.RHS.RHS)) TypeOfAdd; 
    368     else 
    369     static if( /+ (+ C (*> A (+> B X))) -> (*> A (+> (- B (* C A)) X)) +/ 
    370         is(T.DefP == Defined) && 
    371         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
    372          /+ no repeats +/ 
    373         )  
    374         alias OpMulA!(V.LHS, OpAddA!(OpSub!(V.RHS.LHS, OpMul!(T, V.LHS)), V.RHS.RHS)) TypeOfAdd; 
    375     else 
    376     static if( /+ (+ C (*> A (-> B X))) -> (*> A (-> (+ (* C A) B) X)) +/ 
    377         is(T.DefP == Defined) && 
    378         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
    379          /+ no repeats +/ 
    380         )  
    381         alias OpMulA!(V.LHS, OpSubA!(OpAdd!(OpMul!(T, V.LHS), V.RHS.LHS), V.RHS.RHS)) TypeOfAdd; 
    382410    else 
    383411    static if( /+ (+ A (*> B X)) -> (*> B (-> (* A B) X)) +/ 
     
    760788        alias OpDivA!(OpSub!(OpDiv!(Value!(1), T.LHS), Value!(1)), T.RHS) TypeOfSub; 
    761789    else 
     790    static if( /+ (- C (/> A (-R> B X))) -> (/> A (+> (- B (/ C A)) X)) +/ 
     791        is(T.DefP == Defined) && 
     792        is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubAR) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     793         /+ no repeats +/ 
     794        )  
     795        alias OpDivA!(V.LHS, OpAddA!(OpSub!(V.RHS.LHS, OpDiv!(T, V.LHS)), V.RHS.RHS)) TypeOfSub; 
     796    else 
     797    static if( /+ (- X (/> F (-R> E X))) -> (/> (+ 1 F) (-> (/ (* E F) (+ 1 F)) X)) +/ 
     798        is(T.DefP == UnDefined) && 
     799        is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubAR) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     800         && is(T == V.RHS.RHS) 
     801        )  
     802        alias OpDivA!(OpAdd!(Value!(1), V.LHS), OpSubA!(OpDiv!(OpMul!(V.RHS.LHS, V.LHS), OpAdd!(Value!(1), V.LHS)), T)) TypeOfSub; 
     803    else 
     804    static if( /+ (- C (/> A (-> B X))) -> (/> A (-R> (- (/ C A) B) X)) +/ 
     805        is(T.DefP == Defined) && 
     806        is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     807         /+ no repeats +/ 
     808        )  
     809        alias OpDivA!(V.LHS, OpSubAR!(OpSub!(OpDiv!(T, V.LHS), V.RHS.LHS), V.RHS.RHS)) TypeOfSub; 
     810    else 
     811    static if( /+ (- X (/> F (-> E X))) -> (/> (- 1 F) (+> (/ (* E F) (- 1 F)) X)) +/ 
     812        is(T.DefP == UnDefined) && 
     813        is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     814         && is(T == V.RHS.RHS) 
     815        )  
     816        alias OpDivA!(OpSub!(Value!(1), V.LHS), OpAddA!(OpDiv!(OpMul!(V.RHS.LHS, V.LHS), OpSub!(Value!(1), V.LHS)), T)) TypeOfSub; 
     817    else 
     818    static if( /+ (- C (/> A (+> B X))) -> (/> A (-R> (+ (/ C A) B) X)) +/ 
     819        is(T.DefP == Defined) && 
     820        is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     821         /+ no repeats +/ 
     822        )  
     823        alias OpDivA!(V.LHS, OpSubAR!(OpAdd!(OpDiv!(T, V.LHS), V.RHS.LHS), V.RHS.RHS)) TypeOfSub; 
     824    else 
     825    static if( /+ (- X (/> F (+> E X))) -> (/> (- 1 F) (-> (/ (* E F) (- 1 F)) X)) +/ 
     826        is(T.DefP == UnDefined) && 
     827        is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     828         && is(T == V.RHS.RHS) 
     829        )  
     830        alias OpDivA!(OpSub!(Value!(1), V.LHS), OpSubA!(OpDiv!(OpMul!(V.RHS.LHS, V.LHS), OpSub!(Value!(1), V.LHS)), T)) TypeOfSub; 
     831    else 
     832    static if( /+ (- C (*> A (-R> B X))) -> (*> A (+> (- B (* C A)) X)) +/ 
     833        is(T.DefP == Defined) && 
     834        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubAR) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     835         /+ no repeats +/ 
     836        )  
     837        alias OpMulA!(V.LHS, OpAddA!(OpSub!(V.RHS.LHS, OpMul!(T, V.LHS)), V.RHS.RHS)) TypeOfSub; 
     838    else 
     839    static if( /+ (- X (*> F (-R> E X))) -> (/> (+ 1 (/ 1 F)) (+> (/ (/ E F) (+ 1 (/ 1 F))) X)) +/ 
     840        is(T.DefP == UnDefined) && 
     841        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubAR) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     842         && is(T == V.RHS.RHS) 
     843        )  
     844        alias OpDivA!(OpAdd!(Value!(1), OpDiv!(Value!(1), V.LHS)), OpAddA!(OpDiv!(OpDiv!(V.RHS.LHS, V.LHS), OpAdd!(Value!(1), OpDiv!(Value!(1), V.LHS))), T)) TypeOfSub; 
     845    else 
     846    static if( /+ (- X (*> F (-R> E X))) -> (/> (+ 1 (/ 1 F)) (+> (/ (/ E F) (+ 1 (/ 1 F))) X)) +/ 
     847        is(T.DefP == UnDefined) && 
     848        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubAR) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     849         && is(T == V.RHS.RHS) 
     850        )  
     851        alias OpDivA!(OpAdd!(Value!(1), OpDiv!(Value!(1), V.LHS)), OpAddA!(OpDiv!(OpDiv!(V.RHS.LHS, V.LHS), OpAdd!(Value!(1), OpDiv!(Value!(1), V.LHS))), T)) TypeOfSub; 
     852    else 
     853    static if( /+ (- C (*> A (-> B X))) -> (*> A (-R> (- (* A C) B) X)) +/ 
     854        is(T.DefP == Defined) && 
     855        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     856         /+ no repeats +/ 
     857        )  
     858        alias OpMulA!(V.LHS, OpSubAR!(OpSub!(OpMul!(V.LHS, T), V.RHS.LHS), V.RHS.RHS)) TypeOfSub; 
     859    else 
     860    static if( /+ (- X (*> F (-> E X))) -> (/> (- 1 (/ 1 F)) (+> (/ (/ E F) (- 1 (/ 1 F))) X)) +/ 
     861        is(T.DefP == UnDefined) && 
     862        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     863         && is(T == V.RHS.RHS) 
     864        )  
     865        alias OpDivA!(OpSub!(Value!(1), OpDiv!(Value!(1), V.LHS)), OpAddA!(OpDiv!(OpDiv!(V.RHS.LHS, V.LHS), OpSub!(Value!(1), OpDiv!(Value!(1), V.LHS))), T)) TypeOfSub; 
     866    else 
     867    static if( /+ (- C (*> A (+> B X))) -> (*> A (-R> (+ (* C A) B) X)) +/ 
     868        is(T.DefP == Defined) && 
     869        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     870         /+ no repeats +/ 
     871        )  
     872        alias OpMulA!(V.LHS, OpSubAR!(OpAdd!(OpMul!(T, V.LHS), V.RHS.LHS), V.RHS.RHS)) TypeOfSub; 
     873    else 
     874    static if( /+ (- X (*> F (+> E X))) -> (/> (- 1 (/ 1 F)) (-> (/ (/ E F) (- 1 (/ 1 F))) X)) +/ 
     875        is(T.DefP == UnDefined) && 
     876        is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
     877         && is(T == V.RHS.RHS) 
     878        )  
     879        alias OpDivA!(OpSub!(Value!(1), OpDiv!(Value!(1), V.LHS)), OpSubA!(OpDiv!(OpDiv!(V.RHS.LHS, V.LHS), OpSub!(Value!(1), OpDiv!(Value!(1), V.LHS))), T)) TypeOfSub; 
     880    else 
    762881    static if( /+ (- A (-R> B X)) -> (+> (- B A) X) +/ 
    763882        is(T.DefP == Defined) && 
     
    774893        alias OpDivA!(Value!(2), OpAddA!(OpDiv!(V.LHS, Value!(2)), T)) TypeOfSub; 
    775894    else 
    776     static if( /+ (- C (/> A (-R> B X))) -> (/> A (+> (- B (/ C A)) X)) +/ 
    777         is(T.DefP == Defined) && 
    778         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubAR) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
    779          /+ no repeats +/ 
    780         )  
    781         alias OpDivA!(V.LHS, OpAddA!(OpSub!(V.RHS.LHS, OpDiv!(T, V.LHS)), V.RHS.RHS)) TypeOfSub; 
    782     else 
    783     static if( /+ (- C (/> A (+> B X))) -> (/> A (-R> (+ (/ C A) B) X)) +/ 
    784         is(T.DefP == Defined) && 
    785         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
    786          /+ no repeats +/ 
    787         )  
    788         alias OpDivA!(V.LHS, OpSubAR!(OpAdd!(OpDiv!(T, V.LHS), V.RHS.LHS), V.RHS.RHS)) TypeOfSub; 
    789     else 
    790     static if( /+ (- C (/> A (-> B X))) -> (/> A (-R> (- (/ C A) B) X)) +/ 
    791         is(T.DefP == Defined) && 
    792         is(V.Op == DivA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
    793          /+ no repeats +/ 
    794         )  
    795         alias OpDivA!(V.LHS, OpSubAR!(OpSub!(OpDiv!(T, V.LHS), V.RHS.LHS), V.RHS.RHS)) TypeOfSub; 
    796     else 
    797895    static if( /+ (- A (/> B X)) -> (/> B (-R> (/ A B) X)) +/ 
    798896        is(T.DefP == Defined) && 
     
    809907        alias OpDivA!(OpSub!(Value!(1), V.LHS), T) TypeOfSub; 
    810908    else 
    811     static if( /+ (- C (*> A (-R> B X))) -> (*> A (+> (- B (* C A)) X)) +/ 
    812         is(T.DefP == Defined) && 
    813         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubAR) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
    814          /+ no repeats +/ 
    815         )  
    816         alias OpMulA!(V.LHS, OpAddA!(OpSub!(V.RHS.LHS, OpMul!(T, V.LHS)), V.RHS.RHS)) TypeOfSub; 
    817     else 
    818     static if( /+ (- C (*> A (+> B X))) -> (*> A (-R> (+ (* C A) B) X)) +/ 
    819         is(T.DefP == Defined) && 
    820         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == AddA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
    821          /+ no repeats +/ 
    822         )  
    823         alias OpMulA!(V.LHS, OpSubAR!(OpAdd!(OpMul!(T, V.LHS), V.RHS.LHS), V.RHS.RHS)) TypeOfSub; 
    824     else 
    825     static if( /+ (- C (*> A (-> B X))) -> (*> A (-R> (- (* A C) B) X)) +/ 
    826         is(T.DefP == Defined) && 
    827         is(V.Op == MulA) && is(V.LHS.DefP == Defined) && is(V.RHS.Op == SubA) && is(V.RHS.LHS.DefP == Defined) && is(V.RHS.RHS.DefP == UnDefined) 
    828          /+ no repeats +/ 
    829         )  
    830         alias OpMulA!(V.LHS, OpSubAR!(OpSub!(OpMul!(V.LHS, T), V.RHS.LHS), V.RHS.RHS)) TypeOfSub; 
    831     else 
    832909    static if( /+ (- A (*> B X)) -> (*> B (-R> (* A B) X)) +/ 
    833910        is(T.DefP == Defined) && 
     
    843920        )  
    844921        alias OpDivA!(OpSub!(Value!(1), OpDiv!(Value!(1), V.LHS)), T) TypeOfSub; 
     922    else 
     923    static if( /+ (- A (-> B X)) -> (-R> (- A B) X) +/ 
     924        is(T.DefP == Defined) && 
     925        is(V.Op == SubA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined) 
     926         /+ no repeats +/ 
     927        )  
     928        alias OpSubAR!(OpSub!(T, V.LHS), V.RHS) TypeOfSub; 
     929    else 
     930    static if( /+ (- X (-> E X)) -> (- 0 E) +/ 
     931        is(T.DefP == UnDefined) && 
     932        is(V.Op == SubA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined) 
     933         && is(T == V.RHS) 
     934        )  
     935        alias OpSub!(Value!(0), V.LHS) TypeOfSub; 
     936    else 
     937    static if( /+ (- A (+> B X)) -> (-R> (+ A B) X) +/ 
     938        is(T.DefP == Defined) && 
     939        is(V.Op == AddA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined) 
     940         /+ no repeats +/ 
     941        )  
     942        alias OpSubAR!(OpAdd!(T, V.LHS), V.RHS) TypeOfSub; 
     943    else 
     944    static if( /+ (- X (+> E X)) -> E +/ 
     945        is(T.DefP == UnDefined) && 
     946        is(V.Op == AddA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined) 
     947         && is(T == V.RHS) 
     948        )  
     949        alias V.LHS TypeOfSub; 
    845950    else 
    846951    static if( /+ (- (+> B X) A) -> (+> (+ A B) X) +/ 
     
    851956        alias OpAddA!(OpAdd!(V, T.LHS), T.RHS) TypeOfSub; 
    852957    else 
    853     static if( /+ (- A (+> B X)) -> (-R> (+ A B) X) +/ 
    854         is(T.DefP == Defined) && 
    855         is(V.Op == AddA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined) 
    856          /+ no repeats +/ 
    857         )  
    858         alias OpSubAR!(OpAdd!(T, V.LHS), V.RHS) TypeOfSub; 
    859     else 
    860958    static if( /+ (- (-> B X) A) -> (+> (- A B) X) +/ 
    861959        is(T.Op == SubA) && is(T.LHS.DefP == Defined) && is(T.RHS.DefP == UnDefined) && 
     
    864962        )  
    865963        alias OpAddA!(OpSub!(V, T.LHS), T.RHS) TypeOfSub; 
    866     else 
    867     static if( /+ (- A (-> B X)) -> (-R> (- A B) X) +/ 
    868         is(T.DefP == Defined) && 
    869         is(V.Op == SubA) && is(V.LHS.DefP == Defined) && is(V.RHS.DefP == UnDefined) 
    870          /+ no repeats +/ 
    871         )  
    872         alias OpSubAR!(OpSub!(T, V.LHS), V.RHS) TypeOfSub; 
    873964    else 
    874965    static if( /+ (- A B) -> (- A B) +/ 
  • trunk/backmath/meta.lisp

    r176 r177  
    220220;   ((+ x (-r> e x))                (xxx)) 
    221221;   ((+ x (/r> e x))                (xxx)) 
    222 ;  ((+ x (*> f (+> e x)))              ()) 
    223 ;  ((+ x (*> f (-> e x)))              ()) 
     222   ((+ X (*> F (+> E X)))              (/> (+ 1 (/ 1 F)) (+> (/ (/ E F) (+ 1 (/ 1 F))) X))) 
     223   ((+ X (*> F (-> E X)))              (/> (+ 1 (/ 1 F)) (-> (/ (/ E F) (+ 1 (/ 1 F))) X))) 
    224224;   ((+ x (*> f (-r> e x)))             ()) 
    225 ;  ((+ x (/> f (+> e x)))              ()) 
    226 ;  ((+ x (/> f (-> e x)))              ()) 
     225   ((+ X (/> F (+> E X)))              (/> (+ 1 F) (+> (/ (* E F) (+ 1 F)) X))) 
     226   ((+ X (/> F (-> E X)))              (/> (+ 1 F) (-> (/ (* E F) (+ 1 F)) X))) 
    227227;   ((+ x (/> f (-r> e x)))             ()) 
    228228;   ((+ x (/r> f (+> e x)))             ()) 
     
    488488 
    489489    ((- x x)                    0) 
    490 ;  ((- x (+> e x))                 (xxx)
    491 ;  ((- x (-> e x))                 (xxx)) 
     490   ((- x (+> e x))                 e
     491   ((- x (-> e x))                 (- 0 e)) 
    492492    ((- x (*> e x))                 (/> (- 1 (/ 1 e)) x)) 
    493493    ((- x (/> e x))                 (/> (- 1 e) x)) 
    494494    ((- x (-r> e x))                (/> 2 (+> (/ e 2) x))) 
    495495;   ((- x (/r> e x))                (xxx)) 
    496 ;  ((- x (*> f (+> e x)))              ()) 
    497 ;  ((- x (*> f (-> e x)))              ()) 
    498 ;  ((- x (*> f (-r> e x)))             ()) 
    499 ;  ((- x (/> f (+> e x)))              ()) 
    500 ;  ((- x (/> f (-> e x)))              ()) 
    501 ;  ((- x (/> f (-r> e x)))             ()) 
     496   ((- X (*> F (+> E X)))              (/> (- 1 (/ 1 F)) (-> (/ (/ E F) (- 1 (/ 1 F))) X))) 
     497   ((- X (*> F (-> E X)))              (/> (- 1 (/ 1 F)) (+> (/ (/ E F) (- 1 (/ 1 F))) X))) 
     498   ((- X (*> F (-R> E X)))             (/> (+ 1 (/ 1 F)) (+> (/ (/ E F) (+ 1 (/ 1 F))) X))) 
     499   ((- X (/> F (+> E X)))              (/> (- 1 F) (-> (/ (* E F) (- 1 F)) X))) 
     500   ((- X (/> F (-> E X)))              (/> (- 1 F) (+> (/ (* E F) (- 1 F)) X))) 
     501   ((- X (/> F (-R> E X)))             (/> (+ 1 F) (-> (/ (* E F) (+ 1 F)) X))) 
    502502;   ((- x (/r> f (+> e x)))             ()) 
    503503;   ((- x (/r> f (-> e x)))             ())