File: Mathlib/RingTheory/Ideal/Prod.lean

full_name: Ideal.prod
code: /-- `I × J` as an ideal of `R × S`. -/
def prod : Ideal (R × S) 
goal: Ideal (R × S)

full_name: Ideal.mem_prod
code: @[simp]
theorem mem_prod {r : R} {s : S} : (⟨r, s⟩ : R × S) ∈ prod I J ↔ r ∈ I ∧ s ∈ J 
goal: (r, s) ∈ I.prod J ↔ r ∈ I ∧ s ∈ J

full_name: Ideal.prod_top_top
code: @[simp]
theorem prod_top_top : prod (⊤ : Ideal R) (⊤ : Ideal S) = ⊤ 
goal: ⊤.prod ⊤ = ⊤

full_name: Ideal.ideal_prod_eq
code: /-- Every ideal of the product ring is of the form `I × J`, where `I` and `J` can be explicitly
    given as the image under the projection maps. -/
theorem ideal_prod_eq (I : Ideal (R × S)) :
    I = Ideal.prod (map (RingHom.fst R S) I : Ideal R) (map (RingHom.snd R S) I) 
goal: I = (Ideal.map (RingHom.fst R S) I).prod (Ideal.map (RingHom.snd R S) I)

full_name: Ideal.map_fst_prod
code: @[simp]
theorem map_fst_prod (I : Ideal R) (J : Ideal S) : map (RingHom.fst R S) (prod I J) = I 
goal: Ideal.map (RingHom.fst R S) (I.prod J) = I

full_name: Ideal.map_snd_prod
code: @[simp]
theorem map_snd_prod (I : Ideal R) (J : Ideal S) : map (RingHom.snd R S) (prod I J) = J 
goal: Ideal.map (RingHom.snd R S) (I.prod J) = J

full_name: Ideal.map_prodComm_prod
code: @[simp]
theorem map_prodComm_prod :
    map ((RingEquiv.prodComm : R × S ≃+* S × R) : R × S →+* S × R) (prod I J) = prod J I 
goal: Ideal.map (↑RingEquiv.prodComm) (I.prod J) = J.prod I

full_name: Ideal.idealProdEquiv
code: /-- Ideals of `R × S` are in one-to-one correspondence with pairs of ideals of `R` and ideals of
    `S`. -/
def idealProdEquiv : Ideal (R × S) ≃ Ideal R × Ideal S 
goal: Ideal (R × S) ≃ Ideal R × Ideal S

full_name: Ideal.idealProdEquiv_symm_apply
code: @[simp]
theorem idealProdEquiv_symm_apply (I : Ideal R) (J : Ideal S) :
    idealProdEquiv.symm ⟨I, J⟩ = prod I J 
goal: Ideal.idealProdEquiv.symm (I, J) = I.prod J

full_name: Ideal.prod.ext_iff
code: theorem prod.ext_iff {I I' : Ideal R} {J J' : Ideal S} :
    prod I J = prod I' J' ↔ I = I' ∧ J = J' 
goal: I.prod J = I'.prod J' ↔ I = I' ∧ J = J'

full_name: Ideal.isPrime_of_isPrime_prod_top
code: theorem isPrime_of_isPrime_prod_top {I : Ideal R} (h : (Ideal.prod I (⊤ : Ideal S)).IsPrime) :
    I.IsPrime 
goal: I.IsPrime

full_name: Ideal.isPrime_of_isPrime_prod_top'
code: theorem isPrime_of_isPrime_prod_top' {I : Ideal S} (h : (Ideal.prod (⊤ : Ideal R) I).IsPrime) :
    I.IsPrime 
goal: I.IsPrime

full_name: Ideal.isPrime_ideal_prod_top
code: theorem isPrime_ideal_prod_top {I : Ideal R} [h : I.IsPrime] : (prod I (⊤ : Ideal S)).IsPrime 
goal: (I.prod ⊤).IsPrime

full_name: Ideal.isPrime_ideal_prod_top'
code: theorem isPrime_ideal_prod_top' {I : Ideal S} [h : I.IsPrime] : (prod (⊤ : Ideal R) I).IsPrime 
goal: (⊤.prod I).IsPrime

full_name: Ideal.ideal_prod_prime_aux
code: theorem ideal_prod_prime_aux {I : Ideal R} {J : Ideal S} :
    (Ideal.prod I J).IsPrime → I = ⊤ ∨ J = ⊤ 
goal: (I.prod J).IsPrime → I = ⊤ ∨ J = ⊤

full_name: Ideal.ideal_prod_prime
code: /-- Classification of prime ideals in product rings: the prime ideals of `R × S` are precisely the
    ideals of the form `p × S` or `R × p`, where `p` is a prime ideal of `R` or `S`. -/
theorem ideal_prod_prime (I : Ideal (R × S)) :
    I.IsPrime ↔
      (∃ p : Ideal R, p.IsPrime ∧ I = Ideal.prod p ⊤) ∨
        ∃ p : Ideal S, p.IsPrime ∧ I = Ideal.prod ⊤ p 
goal: I.IsPrime ↔ (∃ p, p.IsPrime ∧ I = p.prod ⊤) ∨ ∃ p, p.IsPrime ∧ I = ⊤.prod p