Ltac basic_field_simpl_goal :=
  repeat
   match goal with
  | H:?X1<>0 |- context [?X1 / ?X1] =>
           rewrite (simp_frac_1 X1 H) in * 
  | H:?X1<>0 |- context [(- ?X1) / ?X1] =>
           rewrite (simp_frac_5 X1 H) in *
  | H:- ?X1<>0 |- context [?X1 / - ?X1] =>
           rewrite (simp_frac_6 X1 H) in *
  | H:- ?X1<>0 |- context [(-?X1) / - ?X1] =>
           rewrite (simp_frac_7 X1 H) in *
  | H: ?X1<>0 |- context [0 / ?X1] =>
           rewrite (simp_frac_10 X1 H) in *
  | H: ?X1<>0 |- context [?X1 * (1 / ?X1)] =>
           rewrite (simp_frac_11 X1 H) in *
  | H: ?X2<>0 |- context [(?X1 * ?X2) / ?X2] =>
           rewrite (simp_frac_12 X1 X2 H) in *
  | H: ?X1<>0 |- context [(?X1 * ?X2) / ?X1] =>
           rewrite (simp_frac_13 X1 X2 H) in *
  | H: ?X2<>0 |- context [(- ?X1) / ?X2] =>
           rewrite (simp_frac_14 X1 X2 H) in *
 | H: - ?X2<>0 |- context [ ?X1 / (- ?X2)] =>
           rewrite (simp_frac_16 X1 X2 H) in *;
           let T:=fresh in 
           assert (T:= simp_frac_16_inv X2 H)
  | H:_ |- context [?X1 / 1] =>
           rewrite (simp_frac_15 X1) in *
end.Ltac basic_field_simpl_hyps :=
  repeat
   match goal with
  | H:?X1<>0, Hc: context [?X1 / ?X1] |- _ =>
           rewrite (simp_frac_1 X1 H) in *|-
  | H:?X1<>0, Hc: context [(- ?X1) / ?X1] |- _ =>
           rewrite (simp_frac_5 X1 H) in *|-
  | H:- ?X1<>0, Hc: context [?X1 / - ?X1] |- _ =>
           rewrite (simp_frac_6 X1 H) in *|-
  | H:- ?X1<>0, Hc: context [(- ?X1) / - ?X1] |- _ =>
           rewrite (simp_frac_7 X1 H) in *|-
  | H: ?X1<>0, Hc: context [0 / ?X1] |- _ =>
           rewrite (simp_frac_10 X1 H) in *|-
  | H: ?X1<>0, Hc: context [?X1 * (1 / ?X1)] |- _ =>
           rewrite (simp_frac_11 X1 H) in *|-
  | H: ?X2<>0, Hc: context [(?X1 * ?X2) / ?X2] |- _ =>
           rewrite (simp_frac_12 X1 X2 H) in *|-
  | H: ?X1<>0, Hc: context [(?X1 * ?X2) / ?X1] |- _ =>
           rewrite (simp_frac_13 X1 X2 H) in *|-
 | H: ?X2<>0, Hc: context [(-?X1) / ?X2] |- _ =>
           rewrite (simp_frac_14 X1 X2 H) in *|-
 | H: - ?X2<>0, Hc: context [ ?X1 / (- ?X2)] |- _ =>
           rewrite (simp_frac_16 X1 X2 H) in *|-;
           let T:=fresh in 
           assert (T:= simp_frac_16_inv X2 H)
 | Hc: context [?X1 / 1] |- _ =>
           rewrite (simp_frac_15 X1) in *|-
end.Ltac basic_field_simpl := basic_field_simpl_goal;basic_field_simpl_hyps.Goal forall a b , a<>0 -> b<>0 -> -a<>0 -> -b<>0 ->
 a/a + (-a)/a + a/(-a) + (-a)/(-a) + 0/a + a*(1/a) + (a*b)/a +(a*b)/b -a/1 +a/(-b)= 1  -> 
 b/b + (-b)/b + b/(-b) + (-b)/(-b) +0/b + b*(1/b) +(b*a)/b + (b*a)/a -b/1 + (-a)/1 = 1.

(* Specifications: *)
Lemma same_denom_conclude_1 : forall a b c d :F, a*d = c*b -> b<>0 -> d<>0 -> a/b = c/d.
Lemma same_denom_conclude_2 : forall a b c :F, a = c*b -> b<>0 -> a/b = c.
Lemma same_denom_conclude_3 : forall a c d :F, a*d = c -> d<>0 -> a = c/d.
Lemma same_denom_conclude_4 : forall a b : F, a=0 -> b<>0 -> a/b = 0.
Lemma same_denom_conclude_5 : forall a b : F, 0=a -> b<>0 -> 0 = a/b.