Theorem: AddEquiv.isRegular_congr
File: Mathlib/RingTheory/Regular/RegularSequence.lean

Proof steps:
state_before: R : Type u_1
S : Type u_2
M : Type u_3
M₂ : Type u_4
M₃ : Type u_5
M₄ : Type u_6
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M₂
inst✝⁴ : Module R M
inst✝³ : Module R M₂
inst✝² : Module S M₂
σ : R →+* S
σ' : S →+* R
inst✝¹ : RingHomInvPair σ σ'
inst✝ : RingHomInvPair σ' σ
e : M ≃+ M₂
as : List R
bs : List S
h : List.Forall₂ (fun r s => ∀ (x : M), e (r • x) = s • e x) as bs
⊢ IsRegular M as ↔ IsRegular M₂ bs
state_after: R : Type u_1
S : Type u_2
M : Type u_3
M₂ : Type u_4
M₃ : Type u_5
M₄ : Type u_6
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M₂
inst✝⁴ : Module R M
inst✝³ : Module R M₂
inst✝² : Module S M₂
σ : R →+* S
σ' : S →+* R
inst✝¹ : RingHomInvPair σ σ'
inst✝ : RingHomInvPair σ' σ
e : M ≃+ M₂
as : List R
bs : List S
h : List.Forall₂ (fun r s => ∀ (x : M), e (r • x) = s • e x) as bs
⊢ IsWeaklyRegular M as ∧ ¬Subsingleton (M ⧸ Ideal.ofList as • ⊤) ↔
    IsWeaklyRegular M₂ bs ∧ ¬Subsingleton (M₂ ⧸ Ideal.ofList bs • ⊤)
tactic: conv => congr <;> rw [isRegular_iff, ne_eq, eq_comm,
    ← subsingleton_quotient_iff_eq_top]
state_before: R : Type u_1
S : Type u_2
M : Type u_3
M₂ : Type u_4
M₃ : Type u_5
M₄ : Type u_6
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M₂
inst✝⁴ : Module R M
inst✝³ : Module R M₂
inst✝² : Module S M₂
σ : R →+* S
σ' : S →+* R
inst✝¹ : RingHomInvPair σ σ'
inst✝ : RingHomInvPair σ' σ
e : M ≃+ M₂
as : List R
bs : List S
h : List.Forall₂ (fun r s => ∀ (x : M), e (r • x) = s • e x) as bs
⊢ IsWeaklyRegular M as ∧ ¬Subsingleton (M ⧸ Ideal.ofList as • ⊤) ↔
    IsWeaklyRegular M₂ bs ∧ ¬Subsingleton (M₂ ⧸ Ideal.ofList bs • ⊤)
state_after: R : Type u_1
S : Type u_2
M : Type u_3
M₂ : Type u_4
M₃ : Type u_5
M₄ : Type u_6
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M₂
inst✝⁴ : Module R M
inst✝³ : Module R M₂
inst✝² : Module S M₂
σ : R →+* S
σ' : S →+* R
inst✝¹ : RingHomInvPair σ σ'
inst✝ : RingHomInvPair σ' σ
e : M ≃+ M₂
as : List R
bs : List S
h : List.Forall₂ (fun r s => ∀ (x : M), e (r • x) = s • e x) as bs
e' : M ⧸ (Ideal.ofList as • ⊤).toAddSubgroup ≃+ M₂ ⧸ (Ideal.ofList bs • ⊤).toAddSubgroup :=
  QuotientAddGroup.congr (Ideal.ofList as • ⊤).toAddSubgroup (Ideal.ofList bs • ⊤).toAddSubgroup e ⋯
⊢ IsWeaklyRegular M as ∧ ¬Subsingleton (M ⧸ Ideal.ofList as • ⊤) ↔
    IsWeaklyRegular M₂ bs ∧ ¬Subsingleton (M₂ ⧸ Ideal.ofList bs • ⊤)
tactic: let e' := QuotientAddGroup.congr _ _ e <|
    AddHom.map_smul_top_toAddSubgroup_of_surjective e.surjective h
state_before: R : Type u_1
S : Type u_2
M : Type u_3
M₂ : Type u_4
M₃ : Type u_5
M₄ : Type u_6
inst✝⁸ : CommRing R
inst✝⁷ : CommRing S
inst✝⁶ : AddCommGroup M
inst✝⁵ : AddCommGroup M₂
inst✝⁴ : Module R M
inst✝³ : Module R M₂
inst✝² : Module S M₂
σ : R →+* S
σ' : S →+* R
inst✝¹ : RingHomInvPair σ σ'
inst✝ : RingHomInvPair σ' σ
e : M ≃+ M₂
as : List R
bs : List S
h : List.Forall₂ (fun r s => ∀ (x : M), e (r • x) = s • e x) as bs
e' : M ⧸ (Ideal.ofList as • ⊤).toAddSubgroup ≃+ M₂ ⧸ (Ideal.ofList bs • ⊤).toAddSubgroup :=
  QuotientAddGroup.congr (Ideal.ofList as • ⊤).toAddSubgroup (Ideal.ofList bs • ⊤).toAddSubgroup e ⋯
⊢ IsWeaklyRegular M as ∧ ¬Subsingleton (M ⧸ Ideal.ofList as • ⊤) ↔
    IsWeaklyRegular M₂ bs ∧ ¬Subsingleton (M₂ ⧸ Ideal.ofList bs • ⊤)
state_after: no goals
tactic: exact and_congr (e.isWeaklyRegular_congr h) e'.subsingleton_congr.not