%	Changes augredand by replacing Cdr(augredand) (effectively) by
%	Cdr(augredand)*coef1 + pol2*coef2. Cadr(place) is removed.

(DE SimpPolLinComb (augredand place pol coef1 coef2)
 (PROG	(AA BB DD EE)
	(COND ((NOT (EQ augredand place))
	       (PolPartNMult (PPol augredand) (PolTail place) coef1)))
	(RemoveNextTm place)
	(SETQ AA place)
	(SETQ BB pol)
	(GO Ml)
  Bgap	(PolDecap AA)
	(PutLc AA (Cf* (Lc AA) coef1))
	(COND ((Pol0? (PolTail AA)) (RETURN (ConcPolNMult AA BB coef2)))
	      ((Mon!= (Lm BB) (Lm (PolTail AA)))
	       (COND ((ZEROP (SETQ DD (CfLinComb (Lc (PolTail AA)) coef1
						 (Lc BB) coef2)))
		      (RemoveNextTm AA))
		     (T
		      (PolDecap AA)
		      (PutLc AA DD)))
	       (PolDecap BB)
	       (GO Ml))
	      ((MONLESSP EE (Linx (PolTail AA))) (GO Bgap)))
	(InsertTm AA (Cf!&Mon2Tm (Cf* (Lc BB) coef2) (Lm BB)))
	(PolDecap AA)
	(PolDecap BB)
	Ml
	(COND ((AND (PolTail AA) BB)
	       (COND ((Mon!= (Lm BB) (Lm (PolTail AA)))
		      (COND ((ZEROP (SETQ DD
					  (CfLinComb (Lc (PolTail AA)) coef1
						     (Lc BB) coef2)))
			     (RemoveNextTm AA))
			    (T
			     (PolDecap AA)
			     (PutLc AA DD)))
		      (PolDecap BB)
		      (GO Ml))
		     ((MONLESSP (Linx (PolTail AA)) (SETQ EE (Linx BB)))
		      (InsertTm AA (Cf!&Mon2Tm (Cf* (Lc BB) coef2)
					       (Lm BB)))
		      (PolDecap AA)
		      (PolDecap BB)
		      (GO Ml))
		     (T (GO Bgap))))
	      (BB
	       (ConcPolNMult AA BB coef2))
	      ((PolTail AA)
	       (PolNMult (PolTail AA) coef1)))
 ))



%	Changes augredand by replacing Cdr(augredand) (effectively) by
%	Cdr(augredand)*coef1 + pol2*coef2. Cadr(place) is removed.
%	The content of the changed augredand is returned.

(DE ContentSimpPolLinComb (augredand place pol coef1 coef2)
 (PROG	(AA BB DD EE FF)
	(SETQ BB pol)
	(SETQ FF 0)
	(RemoveNextTm place)
	(COND ((EQ augredand place)
	       (SETQ AA place)
	       (GO Ml)))
	(SETQ AA (PPol augredand))
  Fl	(COND ((NOT (EQ FF 1)) (SETQ FF (GCDN FF (Lc AA)))))
	(PutLc AA (Cf* (Lc AA) coef1))
	(COND ((NOT (EQ AA place))
	       (PolDecap AA)
	       (GO Fl)))
	(SETQ FF (Cf* coef1 FF))
	(GO Ml)
  Bgap	(PolDecap AA)
	(PutLc AA (Cf* (Lc AA) coef1))
	(COND ((NOT (EQ FF 1)) (SETQ FF (GCDN (Lc AA) FF))))
	(COND ((Pol0? (PolTail AA))
	       (ConcPolNMult AA BB coef2)
	       (RETURN (NPolGCD FF (PolTail AA))))
	      ((Mon!= (Lm BB) (Lm (PolTail AA)))
	       (COND ((ZEROP (SETQ DD (CfLinComb (Lc (PolTail AA)) coef1
						 (Lc BB) coef2)))
		      (RemoveNextTm AA))
		     (T
		      (PolDecap AA)
		      (COND ((NOT (EQ FF 1)) (SETQ FF (GCDN DD FF))))
		      (PutLc AA DD)))
	       (PolDecap BB)
	       (GO Ml))
	      ((MONLESSP EE (Linx (PolTail AA))) (GO Bgap)))
	(InsertTm AA (Cf!&Mon2Tm (Cf* (Lc BB) coef2) (Lm BB)))
	(PolDecap AA)
	(COND ((NOT (EQ FF 1)) (SETQ FF (GCDN (Lc AA) FF))))
	(PolDecap BB)
  Ml	(COND ((AND (PolTail AA) BB)
	       (COND ((Mon!= (Lm BB) (Lm (PolTail AA)))
		      (COND ((ZEROP (SETQ DD
					  (CfLinComb (Lc (PolTail AA)) coef1
						     (Lc BB) coef2)))
			     (RemoveNextTm AA))
			    (T
			     (PolDecap AA)
			     (COND ((NOT (EQ FF 1)) (SETQ FF (GCDN DD FF))))
			     (PutLc AA DD)))
		      (PolDecap BB)
		      (GO Ml))
		     ((MONLESSP (Linx (PolTail AA)) (SETQ EE (Linx BB)))
		      (InsertTm AA (Cf!&Mon2Tm (Cf* (Lc BB) coef2)
					       (Lm BB)))
		      (PolDecap AA)
		      (COND ((NOT (EQ FF 1)) (SETQ FF (GCDN (Lc AA) FF))))
		      (PolDecap BB)
		      (GO Ml))
		     (T (GO Bgap))))
	      (BB
	       (ConcPolNMult AA BB coef2))
	      ((PolTail AA)
	       (PolNMult (PolTail AA) coef1)))
	(RETURN (NPolGCD FF (PolTail AA)))
 ))
