@@ -2662,6 +2662,14 @@ noncomputable instance : field (fraction_ring A) :=
2662
2662
(algebra_map _ _ r / algebra_map A _ s : fraction_ring A) :=
2663
2663
by rw [localization.mk_eq_mk', is_fraction_ring.mk'_eq_div]
2664
2664
2665
+ noncomputable instance [is_domain R] [field K] [algebra R K] [no_zero_smul_divisors R K] :
2666
+ algebra (fraction_ring R) K :=
2667
+ ring_hom.to_algebra (is_fraction_ring.lift (no_zero_smul_divisors.algebra_map_injective R _))
2668
+
2669
+ instance [is_domain R] [field K] [algebra R K] [no_zero_smul_divisors R K] :
2670
+ is_scalar_tower R (fraction_ring R) K :=
2671
+ is_scalar_tower.of_algebra_map_eq (λ x, (is_fraction_ring.lift_algebra_map _ x).symm)
2672
+
2665
2673
variables (A)
2666
2674
2667
2675
/-- Given an integral domain `A` and a localization map to a field of fractions
@@ -2672,3 +2680,50 @@ noncomputable def alg_equiv (K : Type*) [field K] [algebra A K] [is_fraction_rin
2672
2680
localization.alg_equiv (non_zero_divisors A) K
2673
2681
2674
2682
end fraction_ring
2683
+
2684
+ namespace is_fraction_ring
2685
+
2686
+ variables (R S K)
2687
+
2688
+ /-- `S` is algebraic over `R` iff a fraction ring of `S` is algebraic over `R` -/
2689
+ lemma is_algebraic_iff' [field K] [is_domain R] [is_domain S] [algebra R K] [algebra S K]
2690
+ [no_zero_smul_divisors R K] [is_fraction_ring S K] [is_scalar_tower R S K] :
2691
+ algebra.is_algebraic R S ↔ algebra.is_algebraic R K :=
2692
+ begin
2693
+ simp only [algebra.is_algebraic],
2694
+ split,
2695
+ { intros h x,
2696
+ rw [is_fraction_ring.is_algebraic_iff R (fraction_ring R) K, is_algebraic_iff_is_integral],
2697
+ obtain ⟨(a : S), b, ha, rfl⟩ := @div_surjective S _ _ _ _ _ _ x,
2698
+ obtain ⟨f, hf₁, hf₂⟩ := h b,
2699
+ rw [div_eq_mul_inv],
2700
+ refine is_integral_mul _ _,
2701
+ { rw [← is_algebraic_iff_is_integral],
2702
+ refine _root_.is_algebraic_of_larger_base_of_injective
2703
+ (no_zero_smul_divisors.algebra_map_injective R (fraction_ring R)) _,
2704
+ exact is_algebraic_algebra_map_of_is_algebraic (h a) },
2705
+ { rw [← is_algebraic_iff_is_integral],
2706
+ use (f.map (algebra_map R (fraction_ring R))).reverse,
2707
+ split,
2708
+ { rwa [ne.def, polynomial.reverse_eq_zero, ← polynomial.degree_eq_bot,
2709
+ polynomial.degree_map_eq_of_injective
2710
+ (no_zero_smul_divisors.algebra_map_injective R (fraction_ring R)),
2711
+ polynomial.degree_eq_bot]},
2712
+ { haveI : invertible (algebra_map S K b),
2713
+ from is_unit.invertible (is_unit_of_mem_non_zero_divisors
2714
+ (mem_non_zero_divisors_iff_ne_zero.2
2715
+ (λ h, non_zero_divisors.ne_zero ha
2716
+ ((ring_hom.injective_iff (algebra_map S K)).1
2717
+ (no_zero_smul_divisors.algebra_map_injective _ _) b h)))),
2718
+ rw [polynomial.aeval_def, ← inv_of_eq_inv, polynomial.eval₂_reverse_eq_zero_iff,
2719
+ polynomial.eval₂_map, ← is_scalar_tower.algebra_map_eq, ← polynomial.aeval_def,
2720
+ ← is_scalar_tower.algebra_map_aeval, hf₂, ring_hom.map_zero] } } },
2721
+ { intros h x,
2722
+ obtain ⟨f, hf₁, hf₂⟩ := h (algebra_map S K x),
2723
+ use [f, hf₁],
2724
+ rw [← is_scalar_tower.algebra_map_aeval] at hf₂,
2725
+ exact (algebra_map S K).injective_iff.1
2726
+ (no_zero_smul_divisors.algebra_map_injective _ _) _ hf₂ }
2727
+ end
2728
+
2729
+ end is_fraction_ring
0 commit comments