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.