awhecmu/canonical-drafter-extract-mathlib huggingface dataset:
-- Module: Mathlib.LinearAlgebra.FreeModule.PID
Goal:
ι : Type u_1
R : Type u_2
inst : CommRing R
inst_1 : IsPrincipalIdealRing R
inst_2 : IsDomain R
inst_3 : Finite ι
O : Type u_4
inst_4 : AddCommGroup O
inst_5 : Module R O
M N : Submodule R O
b'M : Basis.{u_1, u_2, u_4} ι R ↥M
N_bot : N ≠ ⊥
N_le_M : N ≤ M
this :
  ∃ (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N
ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R :=
  this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N)
ϕ_max :
  ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ¬this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
              ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
                ¬ϕ.submoduleImage N < ψ.submoduleImage N).submoduleImage
          N <
        ψ.submoduleImage N
a : R := generator (ϕ.submoduleImage N)
a_mem : a ∈ ϕ.submoduleImage N
a_zero : ¬a = 0
y : O
yN : y ∈ N
ϕy_eq : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a
c : (i : ι) → R
hc : ∀ (i : ι), (b'M.coord i : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a * c i
val : Fintype ι
y' : O := ∑ i : ι, HSMul.hSMul (β := O) (c i) (↑((b'M : (a : ι) → ↥M) i) : O)
y'M : y' ∈ M
mk_y' :
  Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M = ∑ i : ι, HSMul.hSMul (β := ↥M) (c i) ((b'M : (a : ι) → ↥M) i : ↥M)
a_smul_y' : a • y' = y
ϕy'_eq : Eq.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (1 : R)
ϕy'_ne_zero : Ne.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (0 : R)
M' : Submodule R O := map M.subtype ϕ.ker
N' : Submodule R O := map N.subtype (ϕ ∘ₗ inclusion N_le_M).ker
M'_le_M : M' ≤ M
N'_le_M' : N' ≤ M'
N'_le_N : N' ≤ N
y'_ortho_M' : ∀ (c : R), ∀ z ∈ M', c • y' + z = 0 → c = 0
⊢ ∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0

Tactic:
have ay'_ortho_N' : ∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0 := by
    intro c z zN' hc
    refine (mul_eq_zero.mp (y'_ortho_M' (a * c) z (N'_le_M' zN') ?_)).resolve_left a_zero
    rw [mul_comm, mul_smul, hc]
-- Module: Mathlib.LinearAlgebra.FreeModule.PID
Goal:
ι : Type u_1
R : Type u_2
inst : CommRing R
inst_1 : IsPrincipalIdealRing R
inst_2 : IsDomain R
inst_3 : Finite ι
O : Type u_4
inst_4 : AddCommGroup O
inst_5 : Module R O
M N : Submodule R O
b'M : Basis.{u_1, u_2, u_4} ι R ↥M
N_bot : N ≠ ⊥
N_le_M : N ≤ M
this :
  ∃ (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N
ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R :=
  this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N)
ϕ_max :
  ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ¬this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
              ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
                ¬ϕ.submoduleImage N < ψ.submoduleImage N).submoduleImage
          N <
        ψ.submoduleImage N
a : R := generator (ϕ.submoduleImage N)
a_mem : a ∈ ϕ.submoduleImage N
a_zero : ¬a = 0
y : O
yN : y ∈ N
ϕy_eq : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a
c : (i : ι) → R
hc : ∀ (i : ι), (b'M.coord i : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a * c i
val : Fintype ι
y' : O := ∑ i : ι, HSMul.hSMul (β := O) (c i) (↑((b'M : (a : ι) → ↥M) i) : O)
y'M : y' ∈ M
mk_y' :
  Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M = ∑ i : ι, HSMul.hSMul (β := ↥M) (c i) ((b'M : (a : ι) → ↥M) i : ↥M)
a_smul_y' : a • y' = y
ϕy'_eq : Eq.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (1 : R)
ϕy'_ne_zero : Ne.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (0 : R)
M' : Submodule R O := map M.subtype ϕ.ker
N' : Submodule R O := map N.subtype (ϕ ∘ₗ inclusion N_le_M).ker
M'_le_M : M' ≤ M
N'_le_M' : N' ≤ M'
N'_le_N : N' ≤ N
y'_ortho_M' : ∀ (c : R), ∀ z ∈ M', c • y' + z = 0 → c = 0
ay'_ortho_N' : ∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0
⊢ (∀ (c : R), ∀ z ∈ M', c • y' + z = 0 → c = 0) ∧
    (∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0) ∧
      ∀ (n' : ℕ) (bN' : Basis.{0, u_2, u_4} (Fin n') R ↥N'),
        ∃ (bN : Basis.{0, u_2, u_4} (Fin (n' + 1)) R ↥N),
          ∀ (m' : ℕ) (hn'm' : n' ≤ m') (bM' : Basis.{0, u_2, u_4} (Fin m') R ↥M'),
            ∃ (hnm : n' + 1 ≤ m' + 1) (bM : Basis.{0, u_2, u_4} (Fin (m' + 1)) R ↥M),
              ∀ (as : Fin n' → R),
                (∀ (i : Fin n'),
                    (↑((bN' : (a : Fin n') → ↥N') i) : O) =
                      HSMul.hSMul (β := O) (as i) (↑((bM' : (a : Fin m') → ↥M') (Fin.castLE hn'm' i)) : O)) →
                  ∃ (as' : Fin (n' + 1) → R),
                    ∀ (i : Fin (n' + 1)),
                      (↑((bN : (a : Fin (n' + 1)) → ↥N) i) : O) =
                        HSMul.hSMul (β := O) (as' i) (↑((bM : (a : Fin (m' + 1)) → ↥M) (Fin.castLE hnm i)) : O)

Tactic:
⟨y'_ortho_M', ay'_ortho_N', fun n' bN' ↦ ⟨?_, ?_⟩⟩

Premises used: And.intro, Exists.intro
-- Module: Mathlib.LinearAlgebra.FreeModule.PID
Goal:
ι : Type u_1
R : Type u_2
inst : CommRing R
inst_1 : IsPrincipalIdealRing R
inst_2 : IsDomain R
inst_3 : Finite ι
O : Type u_4
inst_4 : AddCommGroup O
inst_5 : Module R O
M N : Submodule R O
b'M : Basis.{u_1, u_2, u_4} ι R ↥M
N_bot : N ≠ ⊥
N_le_M : N ≤ M
this :
  ∃ (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N
ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R :=
  this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N)
ϕ_max :
  ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ¬this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
              ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
                ¬ϕ.submoduleImage N < ψ.submoduleImage N).submoduleImage
          N <
        ψ.submoduleImage N
a : R := generator (ϕ.submoduleImage N)
a_mem : a ∈ ϕ.submoduleImage N
a_zero : ¬a = 0
y : O
yN : y ∈ N
ϕy_eq : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a
c : (i : ι) → R
hc : ∀ (i : ι), (b'M.coord i : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a * c i
val : Fintype ι
y' : O := ∑ i : ι, HSMul.hSMul (β := O) (c i) (↑((b'M : (a : ι) → ↥M) i) : O)
y'M : y' ∈ M
mk_y' :
  Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M = ∑ i : ι, HSMul.hSMul (β := ↥M) (c i) ((b'M : (a : ι) → ↥M) i : ↥M)
a_smul_y' : a • y' = y
ϕy'_eq : Eq.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (1 : R)
ϕy'_ne_zero : Ne.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (0 : R)
M' : Submodule R O := map M.subtype ϕ.ker
N' : Submodule R O := map N.subtype (ϕ ∘ₗ inclusion N_le_M).ker
M'_le_M : M' ≤ M
N'_le_M' : N' ≤ M'
N'_le_N : N' ≤ N
y'_ortho_M' : ∀ (c : R), ∀ z ∈ M', c • y' + z = 0 → c = 0
ay'_ortho_N' : ∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0
n' : ℕ
bN' : Basis.{0, u_2, u_4} (Fin n') R ↥N'
neg : ∀ (c : R), ∀ x ∈ N', c • y + x = 0 → c = 0
neg₁ : ∀ z ∈ N, ∃ (c : R), z + c • y ∈ N'
⊢ Basis.{0, u_2, u_4} (Fin (n' + 1)) R ↥N

Tactic:
refine Basis.mkFinConsOfLE y yN bN' N'_le_N ?_ ?_

Premises used: Module.Basis.mkFinConsOfLE
-- Module: Mathlib.LinearAlgebra.FreeModule.PID
Goal:
ι : Type u_1
R : Type u_2
inst : CommRing R
inst_1 : IsPrincipalIdealRing R
inst_2 : IsDomain R
inst_3 : Finite ι
O : Type u_4
inst_4 : AddCommGroup O
inst_5 : Module R O
M N : Submodule R O
b'M : Basis.{u_1, u_2, u_4} ι R ↥M
N_bot : N ≠ ⊥
N_le_M : N ≤ M
this :
  ∃ (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N
ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R :=
  this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N)
ϕ_max :
  ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ¬this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
              ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
                ¬ϕ.submoduleImage N < ψ.submoduleImage N).submoduleImage
          N <
        ψ.submoduleImage N
a : R := generator (ϕ.submoduleImage N)
a_mem : a ∈ ϕ.submoduleImage N
a_zero : ¬a = 0
y : O
yN : y ∈ N
ϕy_eq : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a
c_1 : (i : ι) → R
hc_1 : ∀ (i : ι), (b'M.coord i : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a * c_1 i
val : Fintype ι
y' : O := ∑ i : ι, HSMul.hSMul (β := O) (c_1 i) (↑((b'M : (a : ι) → ↥M) i) : O)
y'M : y' ∈ M
mk_y' :
  Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M = ∑ i : ι, HSMul.hSMul (β := ↥M) (c_1 i) ((b'M : (a : ι) → ↥M) i : ↥M)
a_smul_y' : a • y' = y
ϕy'_eq : Eq.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (1 : R)
ϕy'_ne_zero : Ne.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (0 : R)
M' : Submodule R O := map M.subtype ϕ.ker
N' : Submodule R O := map N.subtype (ϕ ∘ₗ inclusion N_le_M).ker
M'_le_M : M' ≤ M
N'_le_M' : N' ≤ M'
N'_le_N : N' ≤ N
y'_ortho_M' : ∀ (c : R), ∀ z ∈ M', c • y' + z = 0 → c = 0
ay'_ortho_N' : ∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0
n' : ℕ
bN' : Basis.{0, u_2, u_4} (Fin n') R ↥N'
c : R
z : O
zN' : z ∈ N'
hc : c • y + z = 0
⊢ c = 0

Tactic:
ay'_ortho_N' c z zN' ?_
-- Module: Mathlib.LinearAlgebra.FreeModule.PID
Goal:
ι : Type u_1
R : Type u_2
inst : CommRing R
inst_1 : IsPrincipalIdealRing R
inst_2 : IsDomain R
inst_3 : Finite ι
O : Type u_4
inst_4 : AddCommGroup O
inst_5 : Module R O
M N : Submodule R O
b'M : Basis.{u_1, u_2, u_4} ι R ↥M
N_bot : N ≠ ⊥
N_le_M : N ≤ M
this :
  ∃ (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N
ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R :=
  this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N)
ϕ_max :
  ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ¬this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
              ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
                ¬ϕ.submoduleImage N < ψ.submoduleImage N).submoduleImage
          N <
        ψ.submoduleImage N
a : R := generator (ϕ.submoduleImage N)
a_mem : a ∈ ϕ.submoduleImage N
a_zero : ¬a = 0
y : O
yN : y ∈ N
ϕy_eq : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a
c_1 : (i : ι) → R
hc_1 : ∀ (i : ι), (b'M.coord i : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a * c_1 i
val : Fintype ι
y' : O := ∑ i : ι, HSMul.hSMul (β := O) (c_1 i) (↑((b'M : (a : ι) → ↥M) i) : O)
y'M : y' ∈ M
mk_y' :
  Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M = ∑ i : ι, HSMul.hSMul (β := ↥M) (c_1 i) ((b'M : (a : ι) → ↥M) i : ↥M)
a_smul_y' : a • y' = y
ϕy'_eq : Eq.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (1 : R)
ϕy'_ne_zero : Ne.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (0 : R)
M' : Submodule R O := map M.subtype ϕ.ker
N' : Submodule R O := map N.subtype (ϕ ∘ₗ inclusion N_le_M).ker
M'_le_M : M' ≤ M
N'_le_M' : N' ≤ M'
N'_le_N : N' ≤ N
y'_ortho_M' : ∀ (c : R), ∀ z ∈ M', c • y' + z = 0 → c = 0
ay'_ortho_N' : ∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0
n' : ℕ
bN' : Basis.{0, u_2, u_4} (Fin n') R ↥N'
c : R
z : O
zN' : z ∈ N'
hc : c • y + z = 0
neg : c • a • y' + z = 0
⊢ c = 0

Tactic:
refine ay'_ortho_N' c z zN' ?_
-- Module: Mathlib.LinearAlgebra.FreeModule.PID
Goal:
ι : Type u_1
R : Type u_2
inst : CommRing R
inst_1 : IsPrincipalIdealRing R
inst_2 : IsDomain R
inst_3 : Finite ι
O : Type u_4
inst_4 : AddCommGroup O
inst_5 : Module R O
M N : Submodule R O
b'M : Basis.{u_1, u_2, u_4} ι R ↥M
N_bot : N ≠ ⊥
N_le_M : N ≤ M
this :
  ∃ (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N
ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R :=
  this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N)
ϕ_max :
  ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ¬this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
              ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
                ¬ϕ.submoduleImage N < ψ.submoduleImage N).submoduleImage
          N <
        ψ.submoduleImage N
a : R := generator (ϕ.submoduleImage N)
a_mem : a ∈ ϕ.submoduleImage N
a_zero : ¬a = 0
y : O
yN : y ∈ N
ϕy_eq : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a
c_1 : (i : ι) → R
hc_1 : ∀ (i : ι), (b'M.coord i : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a * c_1 i
val : Fintype ι
y' : O := ∑ i : ι, HSMul.hSMul (β := O) (c_1 i) (↑((b'M : (a : ι) → ↥M) i) : O)
y'M : y' ∈ M
mk_y' :
  Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M = ∑ i : ι, HSMul.hSMul (β := ↥M) (c_1 i) ((b'M : (a : ι) → ↥M) i : ↥M)
a_smul_y' : a • y' = y
ϕy'_eq : Eq.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (1 : R)
ϕy'_ne_zero : Ne.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (0 : R)
M' : Submodule R O := map M.subtype ϕ.ker
N' : Submodule R O := map N.subtype (ϕ ∘ₗ inclusion N_le_M).ker
M'_le_M : M' ≤ M
N'_le_M' : N' ≤ M'
N'_le_N : N' ≤ N
y'_ortho_M' : ∀ (c : R), ∀ z ∈ M', c • y' + z = 0 → c = 0
ay'_ortho_N' : ∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0
n' : ℕ
bN' : Basis.{0, u_2, u_4} (Fin n') R ↥N'
c : R
z : O
zN' : z ∈ N'
hc : c • y + z = 0
neg neg₁ neg₂ neg₃ : ∀ (hc : c • a • y' + z = 0), c • a • y' + z = 0
⊢ c • a • y' + z = 0

Tactic:
rwa [← a_smul_y'] at hc
-- Module: Mathlib.LinearAlgebra.FreeModule.PID
Goal:
ι : Type u_1
R : Type u_2
inst : CommRing R
inst_1 : IsPrincipalIdealRing R
inst_2 : IsDomain R
inst_3 : Finite ι
O : Type u_4
inst_4 : AddCommGroup O
inst_5 : Module R O
M N : Submodule R O
b'M : Basis.{u_1, u_2, u_4} ι R ↥M
N_bot : N ≠ ⊥
N_le_M : N ≤ M
this :
  ∃ (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N
ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R :=
  this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N)
ϕ_max :
  ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ¬this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
              ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
                ¬ϕ.submoduleImage N < ψ.submoduleImage N).submoduleImage
          N <
        ψ.submoduleImage N
a : R := generator (ϕ.submoduleImage N)
a_mem : a ∈ ϕ.submoduleImage N
a_zero : ¬a = 0
y : O
yN : y ∈ N
ϕy_eq : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a
c : (i : ι) → R
hc : ∀ (i : ι), (b'M.coord i : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a * c i
val : Fintype ι
y' : O := ∑ i : ι, HSMul.hSMul (β := O) (c i) (↑((b'M : (a : ι) → ↥M) i) : O)
y'M : y' ∈ M
mk_y' :
  Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M = ∑ i : ι, HSMul.hSMul (β := ↥M) (c i) ((b'M : (a : ι) → ↥M) i : ↥M)
a_smul_y' : a • y' = y
ϕy'_eq : Eq.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (1 : R)
ϕy'_ne_zero : Ne.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (0 : R)
M' : Submodule R O := map M.subtype ϕ.ker
N' : Submodule R O := map N.subtype (ϕ ∘ₗ inclusion N_le_M).ker
M'_le_M : M' ≤ M
N'_le_M' : N' ≤ M'
N'_le_N : N' ≤ N
y'_ortho_M' : ∀ (c : R), ∀ z ∈ M', c • y' + z = 0 → c = 0
ay'_ortho_N' : ∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0
n' : ℕ
bN' : Basis.{0, u_2, u_4} (Fin n') R ↥N'
z : O
zN : z ∈ N
⊢ generator (ϕ.submoduleImage N) ∣ (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) z ⋯)

Tactic:
generator_submoduleImage_dvd_of_mem N_le_M ϕ zN

Premises used: Submodule.IsPrincipal.generator_submoduleImage_dvd_of_mem
-- Module: Mathlib.LinearAlgebra.FreeModule.PID
Goal:
ι : Type u_1
R : Type u_2
inst : CommRing R
inst_1 : IsPrincipalIdealRing R
inst_2 : IsDomain R
inst_3 : Finite ι
O : Type u_4
inst_4 : AddCommGroup O
inst_5 : Module R O
M N : Submodule R O
b'M : Basis.{u_1, u_2, u_4} ι R ↥M
N_bot : N ≠ ⊥
N_le_M : N ≤ M
this :
  ∃ (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N
ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R :=
  this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N)
ϕ_max :
  ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ¬this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
              ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
                ¬ϕ.submoduleImage N < ψ.submoduleImage N).submoduleImage
          N <
        ψ.submoduleImage N
a : R := generator (ϕ.submoduleImage N)
a_mem : a ∈ ϕ.submoduleImage N
a_zero : ¬a = 0
y : O
yN : y ∈ N
ϕy_eq : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a
c : (i : ι) → R
hc : ∀ (i : ι), (b'M.coord i : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a * c i
val : Fintype ι
y' : O := ∑ i : ι, HSMul.hSMul (β := O) (c i) (↑((b'M : (a : ι) → ↥M) i) : O)
y'M : y' ∈ M
mk_y' :
  Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M = ∑ i : ι, HSMul.hSMul (β := ↥M) (c i) ((b'M : (a : ι) → ↥M) i : ↥M)
a_smul_y' : a • y' = y
ϕy'_eq : Eq.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (1 : R)
ϕy'_ne_zero : Ne.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (0 : R)
M' : Submodule R O := map M.subtype ϕ.ker
N' : Submodule R O := map N.subtype (ϕ ∘ₗ inclusion N_le_M).ker
M'_le_M : M' ≤ M
N'_le_M' : N' ≤ M'
N'_le_N : N' ≤ N
y'_ortho_M' : ∀ (c : R), ∀ z ∈ M', c • y' + z = 0 → c = 0
ay'_ortho_N' : ∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0
n' : ℕ
bN' : Basis.{0, u_2, u_4} (Fin n') R ↥N'
z : O
zN : z ∈ N
neg :
  ∀ (b : R) (hb : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) z ⋯) = generator (ϕ.submoduleImage N) * b),
    ∃ (c : R), z + c • y ∈ N'
⊢ ∃ (c : R), z + c • y ∈ N'

Tactic:
obtain ⟨b, hb⟩ : _ ∣ ϕ ⟨z, N_le_M zN⟩ := generator_submoduleImage_dvd_of_mem N_le_M ϕ zN

Premises used: Submodule.IsPrincipal.generator_submoduleImage_dvd_of_mem, Subtype.mk, DFunLike.coe
-- Module: Mathlib.LinearAlgebra.FreeModule.PID
Goal:
ι : Type u_1
R : Type u_2
inst : CommRing R
inst_1 : IsPrincipalIdealRing R
inst_2 : IsDomain R
inst_3 : Finite ι
O : Type u_4
inst_4 : AddCommGroup O
inst_5 : Module R O
M N : Submodule R O
b'M : Basis.{u_1, u_2, u_4} ι R ↥M
N_bot : N ≠ ⊥
N_le_M : N ≤ M
this :
  ∃ (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N
ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R :=
  this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
    ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R), ¬ϕ.submoduleImage N < ψ.submoduleImage N)
ϕ_max :
  ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
    ¬this.choose (p := fun (ϕ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R) ↦
              ∀ (ψ : LinearMap.{u_2, u_2, u_4, u_2} (RingHom.id R) (↥M) R),
                ¬ϕ.submoduleImage N < ψ.submoduleImage N).submoduleImage
          N <
        ψ.submoduleImage N
a : R := generator (ϕ.submoduleImage N)
a_mem : a ∈ ϕ.submoduleImage N
a_zero : ¬a = 0
y : O
yN : y ∈ N
ϕy_eq : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a
c : (i : ι) → R
hc : ∀ (i : ι), (b'M.coord i : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y ⋯) = a * c i
val : Fintype ι
y' : O := ∑ i : ι, HSMul.hSMul (β := O) (c i) (↑((b'M : (a : ι) → ↥M) i) : O)
y'M : y' ∈ M
mk_y' :
  Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M = ∑ i : ι, HSMul.hSMul (β := ↥M) (c i) ((b'M : (a : ι) → ↥M) i : ↥M)
a_smul_y' : a • y' = y
ϕy'_eq : Eq.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (1 : R)
ϕy'_ne_zero : Ne.{u_2 + 1} (α := R) ((ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) y' y'M) : R) (0 : R)
M' : Submodule R O := map M.subtype ϕ.ker
N' : Submodule R O := map N.subtype (ϕ ∘ₗ inclusion N_le_M).ker
M'_le_M : M' ≤ M
N'_le_M' : N' ≤ M'
N'_le_N : N' ≤ N
y'_ortho_M' : ∀ (c : R), ∀ z ∈ M', c • y' + z = 0 → c = 0
ay'_ortho_N' : ∀ (c : R), ∀ z ∈ N', c • a • y' + z = 0 → c = 0
n' : ℕ
bN' : Basis.{0, u_2, u_4} (Fin n') R ↥N'
z : O
zN : z ∈ N
b : R
hb : (ϕ : (a : ↥M) → R) (Subtype.mk (p := fun (x : O) ↦ x ∈ M) z ⋯) = generator (ϕ.submoduleImage N) * b
⊢ ∃ (c : R), z + c • y ∈ N'

Tactic:
⟨-b, Submodule.mem_map.mpr ⟨⟨_, N.sub_mem zN (N.smul_mem b yN)⟩, ?_, ?_⟩⟩

Premises used: Iff.mpr, Submodule.mem_map, Subtype.mk, And.intro, Exists.intro, Neg.neg, Submodule.sub_mem, Submodule.smul_mem