l3lab/ntp-mathlib huggingface dataset:
@[simp]
lemma baseChange_b₄ : (W.baseChange A).b₄ = algebraMap R A W.b₄ := by
  simp only [b₄, baseChange_a₁, baseChange_a₃, baseChange_a₄]
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ 2 * (algebraMap R A) W.a₄ + (algebraMap R A) W.a₁ * (algebraMap R A) W.a₃ = (algebraMap R A) (2 * W.a₄ + W.a₁ * W.a₃)

Next tactic:
map_simp
@[simp]
lemma baseChange_b₆ : (W.baseChange A).b₆ = algebraMap R A W.b₆ := by
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange A).b₆ = (algebraMap R A) W.b₆

Next tactic:
simp only [b₆, baseChange_a₃, baseChange_a₆]
@[simp]
lemma baseChange_b₆ : (W.baseChange A).b₆ = algebraMap R A W.b₆ := by
  simp only [b₆, baseChange_a₃, baseChange_a₆]
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (algebraMap R A) W.a₃ ^ 2 + 4 * (algebraMap R A) W.a₆ = (algebraMap R A) (W.a₃ ^ 2 + 4 * W.a₆)

Next tactic:
map_simp
@[simp]
lemma baseChange_b₈ : (W.baseChange A).b₈ = algebraMap R A W.b₈ := by
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange A).b₈ = (algebraMap R A) W.b₈

Next tactic:
simp only [b₈, baseChange_a₁, baseChange_a₂, baseChange_a₃, baseChange_a₄, baseChange_a₆]
@[simp]
lemma baseChange_b₈ : (W.baseChange A).b₈ = algebraMap R A W.b₈ := by
  simp only [b₈, baseChange_a₁, baseChange_a₂, baseChange_a₃, baseChange_a₄, baseChange_a₆]
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (algebraMap R A) W.a₁ ^ 2 * (algebraMap R A) W.a₆ + 4 * (algebraMap R A) W.a₂ * (algebraMap R A) W.a₆ -
          (algebraMap R A) W.a₁ * (algebraMap R A) W.a₃ * (algebraMap R A) W.a₄ +
        (algebraMap R A) W.a₂ * (algebraMap R A) W.a₃ ^ 2 -
      (algebraMap R A) W.a₄ ^ 2 =
    (algebraMap R A) (W.a₁ ^ 2 * W.a₆ + 4 * W.a₂ * W.a₆ - W.a₁ * W.a₃ * W.a₄ + W.a₂ * W.a₃ ^ 2 - W.a₄ ^ 2)

Next tactic:
map_simp
@[simp]
lemma baseChange_c₄ : (W.baseChange A).c₄ = algebraMap R A W.c₄ := by
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange A).c₄ = (algebraMap R A) W.c₄

Next tactic:
simp only [c₄, baseChange_b₂, baseChange_b₄]
@[simp]
lemma baseChange_c₄ : (W.baseChange A).c₄ = algebraMap R A W.c₄ := by
  simp only [c₄, baseChange_b₂, baseChange_b₄]
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (algebraMap R A) W.b₂ ^ 2 - 24 * (algebraMap R A) W.b₄ = (algebraMap R A) (W.b₂ ^ 2 - 24 * W.b₄)

Next tactic:
map_simp
@[simp]
lemma baseChange_c₆ : (W.baseChange A).c₆ = algebraMap R A W.c₆ := by
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange A).c₆ = (algebraMap R A) W.c₆

Next tactic:
simp only [c₆, baseChange_b₂, baseChange_b₄, baseChange_b₆]
@[simp]
lemma baseChange_c₆ : (W.baseChange A).c₆ = algebraMap R A W.c₆ := by
  simp only [c₆, baseChange_b₂, baseChange_b₄, baseChange_b₆]
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ -(algebraMap R A) W.b₂ ^ 3 + 36 * (algebraMap R A) W.b₂ * (algebraMap R A) W.b₄ - 216 * (algebraMap R A) W.b₆ =
    (algebraMap R A) (-W.b₂ ^ 3 + 36 * W.b₂ * W.b₄ - 216 * W.b₆)

Next tactic:
map_simp
@[simp]
lemma baseChange_Δ : (W.baseChange A).Δ = algebraMap R A W.Δ := by
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange A).Δ = (algebraMap R A) W.Δ

Next tactic:
simp only [Δ, baseChange_b₂, baseChange_b₄, baseChange_b₆, baseChange_b₈]
@[simp]
lemma baseChange_Δ : (W.baseChange A).Δ = algebraMap R A W.Δ := by
  simp only [Δ, baseChange_b₂, baseChange_b₄, baseChange_b₆, baseChange_b₈]
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ -(algebraMap R A) W.b₂ ^ 2 * (algebraMap R A) W.b₈ - 8 * (algebraMap R A) W.b₄ ^ 3 - 27 * (algebraMap R A) W.b₆ ^ 2 +
      9 * (algebraMap R A) W.b₂ * (algebraMap R A) W.b₄ * (algebraMap R A) W.b₆ =
    (algebraMap R A) (-W.b₂ ^ 2 * W.b₈ - 8 * W.b₄ ^ 3 - 27 * W.b₆ ^ 2 + 9 * W.b₂ * W.b₄ * W.b₆)

Next tactic:
map_simp
lemma baseChange_self : W.baseChange R = W := by
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ W.baseChange R = W

Next tactic:
ext
lemma baseChange_self : W.baseChange R = W := by
  ext <;> 

Proof state:
case a₁
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange R).a₁ = W.a₁

Next tactic:
rfl
lemma baseChange_self : W.baseChange R = W := by
  ext <;> 

Proof state:
case a₂
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange R).a₂ = W.a₂

Next tactic:
rfl
lemma baseChange_self : W.baseChange R = W := by
  ext <;> 

Proof state:
case a₃
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange R).a₃ = W.a₃

Next tactic:
rfl
lemma baseChange_self : W.baseChange R = W := by
  ext <;> 

Proof state:
case a₄
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange R).a₄ = W.a₄

Next tactic:
rfl
lemma baseChange_self : W.baseChange R = W := by
  ext <;> 

Proof state:
case a₆
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange R).a₆ = W.a₆

Next tactic:
rfl
lemma baseChange_baseChange : (W.baseChange A).baseChange B = W.baseChange B := by
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ (W.baseChange A).baseChange B = W.baseChange B

Next tactic:
ext
lemma baseChange_baseChange : (W.baseChange A).baseChange B = W.baseChange B := by
  ext <;> 

Proof state:
case a₁
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ ((W.baseChange A).baseChange B).a₁ = (W.baseChange B).a₁

Next tactic:
exact (IsScalarTower.algebraMap_apply R A B _).symm
lemma baseChange_baseChange : (W.baseChange A).baseChange B = W.baseChange B := by
  ext <;> 

Proof state:
case a₂
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ ((W.baseChange A).baseChange B).a₂ = (W.baseChange B).a₂

Next tactic:
exact (IsScalarTower.algebraMap_apply R A B _).symm
lemma baseChange_baseChange : (W.baseChange A).baseChange B = W.baseChange B := by
  ext <;> 

Proof state:
case a₃
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ ((W.baseChange A).baseChange B).a₃ = (W.baseChange B).a₃

Next tactic:
exact (IsScalarTower.algebraMap_apply R A B _).symm
lemma baseChange_baseChange : (W.baseChange A).baseChange B = W.baseChange B := by
  ext <;> 

Proof state:
case a₄
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ ((W.baseChange A).baseChange B).a₄ = (W.baseChange B).a₄

Next tactic:
exact (IsScalarTower.algebraMap_apply R A B _).symm
lemma baseChange_baseChange : (W.baseChange A).baseChange B = W.baseChange B := by
  ext <;> 

Proof state:
case a₆
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
⊢ ((W.baseChange A).baseChange B).a₆ = (W.baseChange B).a₆

Next tactic:
exact (IsScalarTower.algebraMap_apply R A B _).symm
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
⊢ W = W'

Next tactic:
rcases mk.inj h1 with ⟨_, _, _, _, _⟩
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  

Proof state:
case intro.intro.intro.intro
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ W = W'

Next tactic:
ext
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  ext <;> 

Proof state:
case intro.intro.intro.intro.a₁
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ W.a₁ = W'.a₁

Next tactic:
apply_fun _ using h
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  ext <;> 

Proof state:
case intro.intro.intro.intro.a₂
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ W.a₂ = W'.a₂

Next tactic:
apply_fun _ using h
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  ext <;> 

Proof state:
case intro.intro.intro.intro.a₃
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ W.a₃ = W'.a₃

Next tactic:
apply_fun _ using h
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  ext <;> 

Proof state:
case intro.intro.intro.intro.a₄
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ W.a₄ = W'.a₄

Next tactic:
apply_fun _ using h
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  ext <;> 

Proof state:
case intro.intro.intro.intro.a₆
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ W.a₆ = W'.a₆

Next tactic:
apply_fun _ using h
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  ext <;> apply_fun _ using h <;> 

Proof state:
case intro.intro.intro.intro.a₁
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁

Next tactic:
assumption
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  ext <;> apply_fun _ using h <;> 

Proof state:
case intro.intro.intro.intro.a₂
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂

Next tactic:
assumption
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  ext <;> apply_fun _ using h <;> 

Proof state:
case intro.intro.intro.intro.a₃
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃

Next tactic:
assumption
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  ext <;> apply_fun _ using h <;> 

Proof state:
case intro.intro.intro.intro.a₄
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄

Next tactic:
assumption
lemma baseChange_injective (h : Function.Injective <| algebraMap R A) :
    Function.Injective <| baseChange (R := R) (A := A) := fun W W' h1 => by
  rcases mk.inj h1 with ⟨_, _, _, _, _⟩
  ext <;> apply_fun _ using h <;> 

Proof state:
case intro.intro.intro.intro.a₆
R : Type u
inst✝⁶ : CommRing R
W✝ : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
h : Function.Injective ⇑(algebraMap R A)
W W' : WeierstrassCurve R
h1 : (fun W => W.baseChange A) W = (fun W => W.baseChange A) W'
left✝³ : (algebraMap R A) W.a₁ = (algebraMap R A) W'.a₁
left✝² : (algebraMap R A) W.a₂ = (algebraMap R A) W'.a₂
left✝¹ : (algebraMap R A) W.a₃ = (algebraMap R A) W'.a₃
left✝ : (algebraMap R A) W.a₄ = (algebraMap R A) W'.a₄
right✝ : (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆
⊢ (algebraMap R A) W.a₆ = (algebraMap R A) W'.a₆

Next tactic:
assumption
lemma baseChange_id : baseChange A (id : VariableChange R) = id := by
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
C : VariableChange R
⊢ baseChange A id = id

Next tactic:
simp only [id, baseChange]
lemma baseChange_id : baseChange A (id : VariableChange R) = id := by
  simp only [id, baseChange]
  

Proof state:
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
C : VariableChange R
⊢ { u := (Units.map ↑(algebraMap R A)) 1, r := (algebraMap R A) 0, s := (algebraMap R A) 0, t := (algebraMap R A) 0 } =
    { u := 1, r := 0, s := 0, t := 0 }

Next tactic:
ext
lemma baseChange_id : baseChange A (id : VariableChange R) = id := by
  simp only [id, baseChange]
  ext <;> 

Proof state:
case u.a
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
C : VariableChange R
⊢ ↑{ u := (Units.map ↑(algebraMap R A)) 1, r := (algebraMap R A) 0, s := (algebraMap R A) 0,
          t := (algebraMap R A) 0 }.u =
    ↑{ u := 1, r := 0, s := 0, t := 0 }.u

Next tactic:
simp only [map_one, Units.val_one, map_zero]
lemma baseChange_id : baseChange A (id : VariableChange R) = id := by
  simp only [id, baseChange]
  ext <;> 

Proof state:
case r
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
C : VariableChange R
⊢ { u := (Units.map ↑(algebraMap R A)) 1, r := (algebraMap R A) 0, s := (algebraMap R A) 0,
        t := (algebraMap R A) 0 }.r =
    { u := 1, r := 0, s := 0, t := 0 }.r

Next tactic:
simp only [map_one, Units.val_one, map_zero]
lemma baseChange_id : baseChange A (id : VariableChange R) = id := by
  simp only [id, baseChange]
  ext <;> 

Proof state:
case s
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
C : VariableChange R
⊢ { u := (Units.map ↑(algebraMap R A)) 1, r := (algebraMap R A) 0, s := (algebraMap R A) 0,
        t := (algebraMap R A) 0 }.s =
    { u := 1, r := 0, s := 0, t := 0 }.s

Next tactic:
simp only [map_one, Units.val_one, map_zero]
lemma baseChange_id : baseChange A (id : VariableChange R) = id := by
  simp only [id, baseChange]
  ext <;> 

Proof state:
case t
R : Type u
inst✝⁶ : CommRing R
W : WeierstrassCurve R
A : Type v
inst✝⁵ : CommRing A
inst✝⁴ : Algebra R A
B : Type w
inst✝³ : CommRing B
inst✝² : Algebra R B
inst✝¹ : Algebra A B
inst✝ : IsScalarTower R A B
C : VariableChange R
⊢ { u := (Units.map ↑(algebraMap R A)) 1, r := (algebraMap R A) 0, s := (algebraMap R A) 0,
        t := (algebraMap R A) 0 }.t =
    { u := 1, r := 0, s := 0, t := 0 }.t

Next tactic:
simp only [map_one, Units.val_one, map_zero]