[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x : ℚ
⊢ ↑x ∈ s
[PROOFSTEP]
simpa only [Rat.cast_def] using div_mem (coe_int_mem s x.num) (coe_nat_mem s x.den)
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
a : ℚ
x : { x // x ∈ s }
⊢ a • ↑x ∈ s
[PROOFSTEP]
simpa only [Rat.smul_def] using mul_mem (coe_rat_mem s a) x.prop
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ↑0 = 0
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ↑1 = 1
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x y : { x // x ∈ s }), ↑(x + y) = ↑x + ↑y
[PROOFSTEP]
intros _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ y✝ : { x // x ∈ s }
⊢ ↑(x✝ + y✝) = ↑x✝ + ↑y✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x y : { x // x ∈ s }), ↑(x * y) = ↑x * ↑y
[PROOFSTEP]
intros _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ y✝ : { x // x ∈ s }
⊢ ↑(x✝ * y✝) = ↑x✝ * ↑y✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x : { x // x ∈ s }), ↑(-x) = -↑x
[PROOFSTEP]
intros _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ : { x // x ∈ s }
⊢ ↑(-x✝) = -↑x✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x y : { x // x ∈ s }), ↑(x - y) = ↑x - ↑y
[PROOFSTEP]
intros _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ y✝ : { x // x ∈ s }
⊢ ↑(x✝ - y✝) = ↑x✝ - ↑y✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x : { x // x ∈ s }), ↑x⁻¹ = (↑x)⁻¹
[PROOFSTEP]
intros _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ : { x // x ∈ s }
⊢ ↑x✝⁻¹ = (↑x✝)⁻¹
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x y : { x // x ∈ s }), ↑(x / y) = ↑x / ↑y
[PROOFSTEP]
intros _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ y✝ : { x // x ∈ s }
⊢ ↑(x✝ / y✝) = ↑x✝ / ↑y✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x : { x // x ∈ s }) (n : ℕ), ↑(n • x) = n • ↑x
[PROOFSTEP]
intros _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ : { x // x ∈ s }
n✝ : ℕ
⊢ ↑(n✝ • x✝) = n✝ • ↑x✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x : { x // x ∈ s }) (n : ℤ), ↑(n • x) = n • ↑x
[PROOFSTEP]
intros _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ : { x // x ∈ s }
n✝ : ℤ
⊢ ↑(n✝ • x✝) = n✝ • ↑x✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x : { x // x ∈ s }) (n : ℚ), ↑(n • x) = n • ↑x
[PROOFSTEP]
intros _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ : { x // x ∈ s }
n✝ : ℚ
⊢ ↑(n✝ • x✝) = n✝ • ↑x✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x : { x // x ∈ s }) (n : ℕ), ↑(x ^ n) = ↑x ^ n
[PROOFSTEP]
intros _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ : { x // x ∈ s }
n✝ : ℕ
⊢ ↑(x✝ ^ n✝) = ↑x✝ ^ n✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (x : { x // x ∈ s }) (n : ℤ), ↑(x ^ n) = ↑x ^ n
[PROOFSTEP]
intros _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
x✝ : { x // x ∈ s }
n✝ : ℤ
⊢ ↑(x✝ ^ n✝) = ↑x✝ ^ n✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (n : ℕ), ↑↑n = ↑n
[PROOFSTEP]
intros _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
n✝ : ℕ
⊢ ↑↑n✝ = ↑n✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (n : ℤ), ↑↑n = ↑n
[PROOFSTEP]
intros _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
n✝ : ℤ
⊢ ↑↑n✝ = ↑n✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
⊢ ∀ (n : ℚ), ↑↑n = ↑n
[PROOFSTEP]
intros _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝³ : Field K
inst✝² : Field L
inst✝¹ : Field M
S : Type u_1
inst✝ : SetLike S K
h : SubfieldClass S K
s : S
n✝ : ℚ
⊢ ↑↑n✝ = ↑n✝
[PROOFSTEP]
rfl
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
p q : Subfield K
h : (fun s => s.carrier) p = (fun s => s.carrier) q
⊢ p = q
[PROOFSTEP]
cases p
[GOAL]
case mk
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
q : Subfield K
toSubring✝ : Subring K
inv_mem'✝ : ∀ (x : K), x ∈ toSubring✝.carrier → x⁻¹ ∈ toSubring✝.carrier
h : (fun s => s.carrier) { toSubring := toSubring✝, inv_mem' := inv_mem'✝ } = (fun s => s.carrier) q
⊢ { toSubring := toSubring✝, inv_mem' := inv_mem'✝ } = q
[PROOFSTEP]
cases q
[GOAL]
case mk.mk
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
toSubring✝¹ : Subring K
inv_mem'✝¹ : ∀ (x : K), x ∈ toSubring✝¹.carrier → x⁻¹ ∈ toSubring✝¹.carrier
toSubring✝ : Subring K
inv_mem'✝ : ∀ (x : K), x ∈ toSubring✝.carrier → x⁻¹ ∈ toSubring✝.carrier
h :
  (fun s => s.carrier) { toSubring := toSubring✝¹, inv_mem' := inv_mem'✝¹ } =
    (fun s => s.carrier) { toSubring := toSubring✝, inv_mem' := inv_mem'✝ }
⊢ { toSubring := toSubring✝¹, inv_mem' := inv_mem'✝¹ } = { toSubring := toSubring✝, inv_mem' := inv_mem'✝ }
[PROOFSTEP]
congr
[GOAL]
case mk.mk.e_toSubring
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
toSubring✝¹ : Subring K
inv_mem'✝¹ : ∀ (x : K), x ∈ toSubring✝¹.carrier → x⁻¹ ∈ toSubring✝¹.carrier
toSubring✝ : Subring K
inv_mem'✝ : ∀ (x : K), x ∈ toSubring✝.carrier → x⁻¹ ∈ toSubring✝.carrier
h :
  (fun s => s.carrier) { toSubring := toSubring✝¹, inv_mem' := inv_mem'✝¹ } =
    (fun s => s.carrier) { toSubring := toSubring✝, inv_mem' := inv_mem'✝ }
⊢ toSubring✝¹ = toSubring✝
[PROOFSTEP]
exact SetLike.ext' h
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s t : Subfield K
x : K
hx : x ∈ s
n : ℤ
⊢ x ^ n ∈ s
[PROOFSTEP]
cases n
[GOAL]
case ofNat
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s t : Subfield K
x : K
hx : x ∈ s
a✝ : ℕ
⊢ x ^ Int.ofNat a✝ ∈ s
[PROOFSTEP]
simpa using s.pow_mem hx _
[GOAL]
case negSucc
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s t : Subfield K
x : K
hx : x ∈ s
a✝ : ℕ
⊢ x ^ Int.negSucc a✝ ∈ s
[PROOFSTEP]
simpa [pow_succ] using s.inv_mem (s.mul_mem hx (s.pow_mem hx _))
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s✝ t : Subfield K
f : K →+* L
s : Subfield L
src✝ : Subring K := Subring.comap f s.toSubring
x : K
hx :
  x ∈
    { toSubsemiring := src✝.toSubsemiring,
              neg_mem' :=
                (_ : ∀ {x : K}, x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
⊢ ↑f x⁻¹ ∈ s
[PROOFSTEP]
rw [map_inv₀ f]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s✝ t : Subfield K
f : K →+* L
s : Subfield L
src✝ : Subring K := Subring.comap f s.toSubring
x : K
hx :
  x ∈
    { toSubsemiring := src✝.toSubsemiring,
              neg_mem' :=
                (_ : ∀ {x : K}, x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
⊢ (↑f x)⁻¹ ∈ s
[PROOFSTEP]
exact s.inv_mem hx
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s✝ t : Subfield K
f : K →+* L
s : Subfield K
src✝ : Subring L := Subring.map f s.toSubring
⊢ ∀ (x : L),
    x ∈
        { toSubsemiring := src✝.toSubsemiring,
                  neg_mem' :=
                    (_ :
                      ∀ {x : L},
                        x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier →
      x⁻¹ ∈
        { toSubsemiring := src✝.toSubsemiring,
                  neg_mem' :=
                    (_ :
                      ∀ {x : L},
                        x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
[PROOFSTEP]
rintro _ ⟨x, hx, rfl⟩
[GOAL]
case intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s✝ t : Subfield K
f : K →+* L
s : Subfield K
src✝ : Subring L := Subring.map f s.toSubring
x : K
hx : x ∈ s.carrier
⊢ (↑f x)⁻¹ ∈
    { toSubsemiring := src✝.toSubsemiring,
              neg_mem' :=
                (_ : ∀ {x : L}, x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
[PROOFSTEP]
exact ⟨x⁻¹, s.inv_mem hx, map_inv₀ f x⟩
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s✝ t : Subfield K
f✝ f : K →+* L
s : Subfield K
y : L
⊢ y ∈ map f s ↔ ∃ x, x ∈ s ∧ ↑f x = y
[PROOFSTEP]
unfold map
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s✝ t : Subfield K
f✝ f : K →+* L
s : Subfield K
y : L
⊢ (y ∈
      let src := Subring.map f s.toSubring;
      {
        toSubring :=
          { toSubsemiring := src.toSubsemiring,
            neg_mem' :=
              (_ :
                ∀ {x : L},
                  x ∈ (Subring.map f s.toSubring).toSubsemiring.toSubmonoid.toSubsemigroup.carrier →
                    -x ∈ (Subring.map f s.toSubring).toSubsemiring.toSubmonoid.toSubsemigroup.carrier) },
        inv_mem' :=
          (_ :
            ∀ (x : L),
              x ∈
                  { toSubsemiring := (Subring.map f s.toSubring).toSubsemiring,
                            neg_mem' :=
                              (_ :
                                ∀ {x : L},
                                  x ∈ (Subring.map f s.toSubring).toSubsemiring.toSubmonoid.toSubsemigroup.carrier →
                                    -x ∈
                                      (Subring.map f
                                                s.toSubring).toSubsemiring.toSubmonoid.toSubsemigroup.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier →
                x⁻¹ ∈
                  { toSubsemiring := (Subring.map f s.toSubring).toSubsemiring,
                            neg_mem' :=
                              (_ :
                                ∀ {x : L},
                                  x ∈ (Subring.map f s.toSubring).toSubsemiring.toSubmonoid.toSubsemigroup.carrier →
                                    -x ∈
                                      (Subring.map f
                                                s.toSubring).toSubsemiring.toSubmonoid.toSubsemigroup.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier) }) ↔
    ∃ x, x ∈ s ∧ ↑f x = y
[PROOFSTEP]
simp only [mem_mk, Subring.mem_mk, Subring.mem_toSubsemiring, Subring.mem_map, mem_toSubring]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
g : L →+* M
f : K →+* L
⊢ fieldRange f = Subfield.map f ⊤
[PROOFSTEP]
ext
[GOAL]
case h
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
g : L →+* M
f : K →+* L
x✝ : L
⊢ x✝ ∈ fieldRange f ↔ x✝ ∈ Subfield.map f ⊤
[PROOFSTEP]
simp
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
g : L →+* M
f : K →+* L
⊢ Subfield.map g (fieldRange f) = fieldRange (comp g f)
[PROOFSTEP]
simpa only [fieldRange_eq_map] using (⊤ : Subfield K).map_map g f
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
src✝ : Subring K := sInf (toSubring '' S)
⊢ ∀ (x : K),
    x ∈
        { toSubsemiring := src✝.toSubsemiring,
                  neg_mem' :=
                    (_ :
                      ∀ {x : K},
                        x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier →
      x⁻¹ ∈
        { toSubsemiring := src✝.toSubsemiring,
                  neg_mem' :=
                    (_ :
                      ∀ {x : K},
                        x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
[PROOFSTEP]
rintro x hx
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
src✝ : Subring K := sInf (toSubring '' S)
x : K
hx :
  x ∈
    { toSubsemiring := src✝.toSubsemiring,
              neg_mem' :=
                (_ : ∀ {x : K}, x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
⊢ x⁻¹ ∈
    { toSubsemiring := src✝.toSubsemiring,
              neg_mem' :=
                (_ : ∀ {x : K}, x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
[PROOFSTEP]
apply Subring.mem_sInf.mpr
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
src✝ : Subring K := sInf (toSubring '' S)
x : K
hx :
  x ∈
    { toSubsemiring := src✝.toSubsemiring,
              neg_mem' :=
                (_ : ∀ {x : K}, x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
⊢ ∀ (p : Subring K), p ∈ toSubring '' S → x⁻¹ ∈ p
[PROOFSTEP]
rintro _ ⟨p, p_mem, rfl⟩
[GOAL]
case intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
src✝ : Subring K := sInf (toSubring '' S)
x : K
hx :
  x ∈
    { toSubsemiring := src✝.toSubsemiring,
              neg_mem' :=
                (_ : ∀ {x : K}, x ∈ src✝.carrier → -x ∈ src✝.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
p : Subfield K
p_mem : p ∈ S
⊢ x⁻¹ ∈ p.toSubring
[PROOFSTEP]
exact p.inv_mem (Subring.mem_sInf.mp hx p.toSubring ⟨p, p_mem, rfl⟩)
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
⊢ ↑(sInf (toSubring '' S)) = ⋂ (s : Subfield K) (_ : s ∈ S), ↑s
[PROOFSTEP]
ext x
[GOAL]
case h
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
x : K
⊢ x ∈ ↑(sInf (toSubring '' S)) ↔ x ∈ ⋂ (s : Subfield K) (_ : s ∈ S), ↑s
[PROOFSTEP]
rw [Subring.coe_sInf, Set.mem_iInter, Set.mem_iInter]
[GOAL]
case h
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
x : K
⊢ (∀ (i : Subring K), x ∈ ⋂ (_ : i ∈ toSubring '' S), ↑i) ↔ ∀ (i : Subfield K), x ∈ ⋂ (_ : i ∈ S), ↑i
[PROOFSTEP]
exact
  ⟨fun h s s' ⟨s_mem, s'_eq⟩ => h s.toSubring _ ⟨⟨s, s_mem, rfl⟩, s'_eq⟩,
    fun h s s' ⟨⟨s'', s''_mem, s_eq⟩, (s'_eq : ↑s = s')⟩ => h s'' _ ⟨s''_mem, by simp [← s_eq, ← s'_eq]⟩⟩
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
x : K
h : ∀ (i : Subfield K), x ∈ ⋂ (_ : i ∈ S), ↑i
s : Subring K
s' : Set K
x✝ : s' ∈ Set.range fun h => ↑s
s'' : Subfield K
s''_mem : s'' ∈ S
s_eq : s''.toSubring = s
s'_eq : ↑s = s'
⊢ (fun h => ↑s'') s''_mem = s'
[PROOFSTEP]
simp [← s_eq, ← s'_eq]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set (Subfield K)
⊢ (sInf s).toSubring = ⨅ (t : Subfield K) (_ : t ∈ s), t.toSubring
[PROOFSTEP]
ext x
[GOAL]
case h
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set (Subfield K)
x : K
⊢ x ∈ (sInf s).toSubring ↔ x ∈ ⨅ (t : Subfield K) (_ : t ∈ s), t.toSubring
[PROOFSTEP]
rw [mem_toSubring, mem_sInf]
[GOAL]
case h
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set (Subfield K)
x : K
⊢ (∀ (p : Subfield K), p ∈ s → x ∈ p) ↔ x ∈ ⨅ (t : Subfield K) (_ : t ∈ s), t.toSubring
[PROOFSTEP]
erw [Subring.mem_sInf]
[GOAL]
case h
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set (Subfield K)
x : K
⊢ (∀ (p : Subfield K), p ∈ s → x ∈ p) ↔ ∀ (p : Subring K), (p ∈ Set.range fun t => ⨅ (_ : t ∈ s), t.toSubring) → x ∈ p
[PROOFSTEP]
exact
  ⟨fun h p ⟨p', hp⟩ => hp ▸ Subring.mem_sInf.mpr fun p ⟨hp', hp⟩ => hp ▸ h _ hp', fun h p hp =>
    h p.toSubring
      ⟨p,
        Subring.ext fun x =>
          ⟨fun hx => Subring.mem_sInf.mp hx _ ⟨hp, rfl⟩, fun hx =>
            Subring.mem_sInf.mpr fun p' ⟨_, p'_eq⟩ => p'_eq ▸ hx⟩⟩⟩
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
⊢ IsGLB S (sInf S)
[PROOFSTEP]
have : ∀ {s t : Subfield K}, (s : Set K) ≤ t ↔ s ≤ t := by simp [SetLike.coe_subset_coe]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
⊢ ∀ {s t : Subfield K}, ↑s ≤ ↑t ↔ s ≤ t
[PROOFSTEP]
simp [SetLike.coe_subset_coe]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
this : ∀ {s t : Subfield K}, ↑s ≤ ↑t ↔ s ≤ t
⊢ IsGLB S (sInf S)
[PROOFSTEP]
refine' IsGLB.of_image this _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
this : ∀ {s t : Subfield K}, ↑s ≤ ↑t ↔ s ≤ t
⊢ IsGLB ((fun {x} => ↑x) '' S) ↑(sInf S)
[PROOFSTEP]
convert isGLB_biInf (s := S) (f := SetLike.coe)
[GOAL]
case h.e'_4
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
this : ∀ {s t : Subfield K}, ↑s ≤ ↑t ↔ s ≤ t
⊢ ↑(sInf S) = ⨅ (x : Subfield K) (_ : x ∈ S), ↑x
[PROOFSTEP]
exact coe_sInf _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
a✝ b✝ : K
x_mem : a✝ ∈ {z | ∃ x x_1 y x_2, x / y = z}
y_mem : b✝ ∈ {z | ∃ x x_1 y x_2, x / y = z}
⊢ a✝ * b✝ ∈ {z | ∃ x x_1 y x_2, x / y = z}
[PROOFSTEP]
obtain ⟨nx, hnx, dx, hdx, rfl⟩ := id x_mem
[GOAL]
case intro.intro.intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
b✝ : K
y_mem : b✝ ∈ {z | ∃ x x_1 y x_2, x / y = z}
nx : K
hnx : nx ∈ Subring.closure s
dx : K
hdx : dx ∈ Subring.closure s
x_mem : nx / dx ∈ {z | ∃ x x_1 y x_2, x / y = z}
⊢ nx / dx * b✝ ∈ {z | ∃ x x_1 y x_2, x / y = z}
[PROOFSTEP]
obtain ⟨ny, hny, dy, hdy, rfl⟩ := id y_mem
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
nx : K
hnx : nx ∈ Subring.closure s
dx : K
hdx : dx ∈ Subring.closure s
x_mem : nx / dx ∈ {z | ∃ x x_1 y x_2, x / y = z}
ny : K
hny : ny ∈ Subring.closure s
dy : K
hdy : dy ∈ Subring.closure s
y_mem : ny / dy ∈ {z | ∃ x x_1 y x_2, x / y = z}
⊢ nx / dx * (ny / dy) ∈ {z | ∃ x x_1 y x_2, x / y = z}
[PROOFSTEP]
exact ⟨nx * ny, Subring.mul_mem _ hnx hny, dx * dy, Subring.mul_mem _ hdx hdy, (div_mul_div_comm _ _ _ _).symm⟩
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
a✝ b✝ : K
x_mem :
  a✝ ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
y_mem :
  b✝ ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
⊢ a✝ + b✝ ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
[PROOFSTEP]
obtain ⟨nx, hnx, dx, hdx, rfl⟩ := id x_mem
[GOAL]
case intro.intro.intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
b✝ : K
y_mem :
  b✝ ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
nx : K
hnx : nx ∈ Subring.closure s
dx : K
hdx : dx ∈ Subring.closure s
x_mem :
  nx / dx ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
⊢ nx / dx + b✝ ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
[PROOFSTEP]
obtain ⟨ny, hny, dy, hdy, rfl⟩ := id y_mem
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
nx : K
hnx : nx ∈ Subring.closure s
dx : K
hdx : dx ∈ Subring.closure s
x_mem :
  nx / dx ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
ny : K
hny : ny ∈ Subring.closure s
dy : K
hdy : dy ∈ Subring.closure s
y_mem :
  ny / dy ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
⊢ nx / dx + ny / dy ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
[PROOFSTEP]
by_cases hx0 : dx = 0
[GOAL]
case pos
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
nx : K
hnx : nx ∈ Subring.closure s
dx : K
hdx : dx ∈ Subring.closure s
x_mem :
  nx / dx ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
ny : K
hny : ny ∈ Subring.closure s
dy : K
hdy : dy ∈ Subring.closure s
y_mem :
  ny / dy ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
hx0 : dx = 0
⊢ nx / dx + ny / dy ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
[PROOFSTEP]
rwa [hx0, div_zero, zero_add]
[GOAL]
case neg
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
nx : K
hnx : nx ∈ Subring.closure s
dx : K
hdx : dx ∈ Subring.closure s
x_mem :
  nx / dx ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
ny : K
hny : ny ∈ Subring.closure s
dy : K
hdy : dy ∈ Subring.closure s
y_mem :
  ny / dy ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
hx0 : ¬dx = 0
⊢ nx / dx + ny / dy ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
[PROOFSTEP]
by_cases hy0 : dy = 0
[GOAL]
case pos
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
nx : K
hnx : nx ∈ Subring.closure s
dx : K
hdx : dx ∈ Subring.closure s
x_mem :
  nx / dx ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
ny : K
hny : ny ∈ Subring.closure s
dy : K
hdy : dy ∈ Subring.closure s
y_mem :
  ny / dy ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
hx0 : ¬dx = 0
hy0 : dy = 0
⊢ nx / dx + ny / dy ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
[PROOFSTEP]
rwa [hy0, div_zero, add_zero]
[GOAL]
case neg
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
nx : K
hnx : nx ∈ Subring.closure s
dx : K
hdx : dx ∈ Subring.closure s
x_mem :
  nx / dx ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
ny : K
hny : ny ∈ Subring.closure s
dy : K
hdy : dy ∈ Subring.closure s
y_mem :
  ny / dy ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
hx0 : ¬dx = 0
hy0 : ¬dy = 0
⊢ nx / dx + ny / dy ∈
    {
          toSubsemigroup :=
            { carrier := {z | ∃ x x_1 y x_2, x / y = z},
              mul_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                      b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
          one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier
[PROOFSTEP]
exact
  ⟨nx * dy + dx * ny, Subring.add_mem _ (Subring.mul_mem _ hnx hdy) (Subring.mul_mem _ hdx hny), dx * dy,
    Subring.mul_mem _ hdx hdy, (div_add_div nx ny hx0 hy0).symm⟩
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
x : K
⊢ x ∈
      {
              toSubmonoid :=
                {
                  toSubsemigroup :=
                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                      mul_mem' :=
                        (_ :
                          ∀ {a b : K},
                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
              add_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈
                        {
                              toSubsemigroup :=
                                { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                  mul_mem' :=
                                    (_ :
                                      ∀ {a b : K},
                                        a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                          b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                            a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                              one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                      b ∈
                          {
                                toSubsemigroup :=
                                  { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                    mul_mem' :=
                                      (_ :
                                        ∀ {a b : K},
                                          a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                            b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                              a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                        a + b ∈
                          {
                                toSubsemigroup :=
                                  { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                    mul_mem' :=
                                      (_ :
                                        ∀ {a b : K},
                                          a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                            b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                              a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
              zero_mem' := (_ : ∃ x x_1 y x_2, x / y = 0) }.toSubmonoid.toSubsemigroup.carrier →
    -x ∈
      {
              toSubmonoid :=
                {
                  toSubsemigroup :=
                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                      mul_mem' :=
                        (_ :
                          ∀ {a b : K},
                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
              add_mem' :=
                (_ :
                  ∀ {a b : K},
                    a ∈
                        {
                              toSubsemigroup :=
                                { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                  mul_mem' :=
                                    (_ :
                                      ∀ {a b : K},
                                        a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                          b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                            a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                              one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                      b ∈
                          {
                                toSubsemigroup :=
                                  { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                    mul_mem' :=
                                      (_ :
                                        ∀ {a b : K},
                                          a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                            b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                              a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                        a + b ∈
                          {
                                toSubsemigroup :=
                                  { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                    mul_mem' :=
                                      (_ :
                                        ∀ {a b : K},
                                          a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                            b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                              a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
              zero_mem' := (_ : ∃ x x_1 y x_2, x / y = 0) }.toSubmonoid.toSubsemigroup.carrier
[PROOFSTEP]
rintro ⟨y, hy, z, hz, x_eq⟩
[GOAL]
case intro.intro.intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
x y : K
hy : y ∈ Subring.closure s
z : K
hz : z ∈ Subring.closure s
x_eq : y / z = x
⊢ -x ∈
    {
            toSubmonoid :=
              {
                toSubsemigroup :=
                  { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                    mul_mem' :=
                      (_ :
                        ∀ {a b : K},
                          a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                            b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
            add_mem' :=
              (_ :
                ∀ {a b : K},
                  a ∈
                      {
                            toSubsemigroup :=
                              { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                mul_mem' :=
                                  (_ :
                                    ∀ {a b : K},
                                      a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                        b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                            one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                    b ∈
                        {
                              toSubsemigroup :=
                                { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                  mul_mem' :=
                                    (_ :
                                      ∀ {a b : K},
                                        a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                          b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                            a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                              one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                      a + b ∈
                        {
                              toSubsemigroup :=
                                { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                  mul_mem' :=
                                    (_ :
                                      ∀ {a b : K},
                                        a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                          b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                            a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                              one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
            zero_mem' := (_ : ∃ x x_1 y x_2, x / y = 0) }.toSubmonoid.toSubsemigroup.carrier
[PROOFSTEP]
exact ⟨-y, Subring.neg_mem _ hy, z, hz, x_eq ▸ neg_div _ _⟩
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
x : K
⊢ x ∈
      {
                toSubsemiring :=
                  {
                    toSubmonoid :=
                      {
                        toSubsemigroup :=
                          { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                            mul_mem' :=
                              (_ :
                                ∀ {a b : K},
                                  a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                    b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                        one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
                    add_mem' :=
                      (_ :
                        ∀ {a b : K},
                          a ∈
                              {
                                    toSubsemigroup :=
                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                        mul_mem' :=
                                          (_ :
                                            ∀ {a b : K},
                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                    one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                            b ∈
                                {
                                      toSubsemigroup :=
                                        { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                          mul_mem' :=
                                            (_ :
                                              ∀ {a b : K},
                                                a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                    a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                      one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                              a + b ∈
                                {
                                      toSubsemigroup :=
                                        { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                          mul_mem' :=
                                            (_ :
                                              ∀ {a b : K},
                                                a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                    a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                      one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
                    zero_mem' := (_ : ∃ x x_1 y x_2, x / y = 0) },
                neg_mem' :=
                  (_ :
                    ∀ {x : K},
                      x ∈
                          {
                                  toSubmonoid :=
                                    {
                                      toSubsemigroup :=
                                        { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                          mul_mem' :=
                                            (_ :
                                              ∀ {a b : K},
                                                a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                    a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                      one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : K},
                                        a ∈
                                            {
                                                  toSubsemigroup :=
                                                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                      mul_mem' :=
                                                        (_ :
                                                          ∀ {a b : K},
                                                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                          b ∈
                                              {
                                                    toSubsemigroup :=
                                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                        mul_mem' :=
                                                          (_ :
                                                            ∀ {a b : K},
                                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                    one_mem' :=
                                                      (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                            a + b ∈
                                              {
                                                    toSubsemigroup :=
                                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                        mul_mem' :=
                                                          (_ :
                                                            ∀ {a b : K},
                                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                    one_mem' :=
                                                      (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
                                  zero_mem' := (_ : ∃ x x_1 y x_2, x / y = 0) }.toSubmonoid.toSubsemigroup.carrier →
                        -x ∈
                          {
                                  toSubmonoid :=
                                    {
                                      toSubsemigroup :=
                                        { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                          mul_mem' :=
                                            (_ :
                                              ∀ {a b : K},
                                                a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                    a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                      one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : K},
                                        a ∈
                                            {
                                                  toSubsemigroup :=
                                                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                      mul_mem' :=
                                                        (_ :
                                                          ∀ {a b : K},
                                                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                          b ∈
                                              {
                                                    toSubsemigroup :=
                                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                        mul_mem' :=
                                                          (_ :
                                                            ∀ {a b : K},
                                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                    one_mem' :=
                                                      (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                            a + b ∈
                                              {
                                                    toSubsemigroup :=
                                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                        mul_mem' :=
                                                          (_ :
                                                            ∀ {a b : K},
                                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                    one_mem' :=
                                                      (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
                                  zero_mem' :=
                                    (_ :
                                      ∃ x x_1 y x_2,
                                        x / y =
                                          0) }.toSubmonoid.toSubsemigroup.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier →
    x⁻¹ ∈
      {
                toSubsemiring :=
                  {
                    toSubmonoid :=
                      {
                        toSubsemigroup :=
                          { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                            mul_mem' :=
                              (_ :
                                ∀ {a b : K},
                                  a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                    b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                        one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
                    add_mem' :=
                      (_ :
                        ∀ {a b : K},
                          a ∈
                              {
                                    toSubsemigroup :=
                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                        mul_mem' :=
                                          (_ :
                                            ∀ {a b : K},
                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                    one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                            b ∈
                                {
                                      toSubsemigroup :=
                                        { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                          mul_mem' :=
                                            (_ :
                                              ∀ {a b : K},
                                                a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                    a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                      one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                              a + b ∈
                                {
                                      toSubsemigroup :=
                                        { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                          mul_mem' :=
                                            (_ :
                                              ∀ {a b : K},
                                                a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                    a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                      one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
                    zero_mem' := (_ : ∃ x x_1 y x_2, x / y = 0) },
                neg_mem' :=
                  (_ :
                    ∀ {x : K},
                      x ∈
                          {
                                  toSubmonoid :=
                                    {
                                      toSubsemigroup :=
                                        { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                          mul_mem' :=
                                            (_ :
                                              ∀ {a b : K},
                                                a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                    a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                      one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : K},
                                        a ∈
                                            {
                                                  toSubsemigroup :=
                                                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                      mul_mem' :=
                                                        (_ :
                                                          ∀ {a b : K},
                                                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                          b ∈
                                              {
                                                    toSubsemigroup :=
                                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                        mul_mem' :=
                                                          (_ :
                                                            ∀ {a b : K},
                                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                    one_mem' :=
                                                      (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                            a + b ∈
                                              {
                                                    toSubsemigroup :=
                                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                        mul_mem' :=
                                                          (_ :
                                                            ∀ {a b : K},
                                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                    one_mem' :=
                                                      (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
                                  zero_mem' := (_ : ∃ x x_1 y x_2, x / y = 0) }.toSubmonoid.toSubsemigroup.carrier →
                        -x ∈
                          {
                                  toSubmonoid :=
                                    {
                                      toSubsemigroup :=
                                        { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                          mul_mem' :=
                                            (_ :
                                              ∀ {a b : K},
                                                a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                    a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                      one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : K},
                                        a ∈
                                            {
                                                  toSubsemigroup :=
                                                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                      mul_mem' :=
                                                        (_ :
                                                          ∀ {a b : K},
                                                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                          b ∈
                                              {
                                                    toSubsemigroup :=
                                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                        mul_mem' :=
                                                          (_ :
                                                            ∀ {a b : K},
                                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                    one_mem' :=
                                                      (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                            a + b ∈
                                              {
                                                    toSubsemigroup :=
                                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                        mul_mem' :=
                                                          (_ :
                                                            ∀ {a b : K},
                                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                    one_mem' :=
                                                      (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
                                  zero_mem' :=
                                    (_ :
                                      ∃ x x_1 y x_2,
                                        x / y =
                                          0) }.toSubmonoid.toSubsemigroup.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
[PROOFSTEP]
rintro ⟨y, hy, z, hz, x_eq⟩
[GOAL]
case intro.intro.intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
x y : K
hy : y ∈ Subring.closure s
z : K
hz : z ∈ Subring.closure s
x_eq : y / z = x
⊢ x⁻¹ ∈
    {
              toSubsemiring :=
                {
                  toSubmonoid :=
                    {
                      toSubsemigroup :=
                        { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                          mul_mem' :=
                            (_ :
                              ∀ {a b : K},
                                a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                  b ∈ {z | ∃ x x_1 y x_2, x / y = z} → a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                      one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
                  add_mem' :=
                    (_ :
                      ∀ {a b : K},
                        a ∈
                            {
                                  toSubsemigroup :=
                                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                      mul_mem' :=
                                        (_ :
                                          ∀ {a b : K},
                                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                          b ∈
                              {
                                    toSubsemigroup :=
                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                        mul_mem' :=
                                          (_ :
                                            ∀ {a b : K},
                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                    one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                            a + b ∈
                              {
                                    toSubsemigroup :=
                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                        mul_mem' :=
                                          (_ :
                                            ∀ {a b : K},
                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                    one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
                  zero_mem' := (_ : ∃ x x_1 y x_2, x / y = 0) },
              neg_mem' :=
                (_ :
                  ∀ {x : K},
                    x ∈
                        {
                                toSubmonoid :=
                                  {
                                    toSubsemigroup :=
                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                        mul_mem' :=
                                          (_ :
                                            ∀ {a b : K},
                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                    one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
                                add_mem' :=
                                  (_ :
                                    ∀ {a b : K},
                                      a ∈
                                          {
                                                toSubsemigroup :=
                                                  { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                    mul_mem' :=
                                                      (_ :
                                                        ∀ {a b : K},
                                                          a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                            b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                              a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                        b ∈
                                            {
                                                  toSubsemigroup :=
                                                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                      mul_mem' :=
                                                        (_ :
                                                          ∀ {a b : K},
                                                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                          a + b ∈
                                            {
                                                  toSubsemigroup :=
                                                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                      mul_mem' :=
                                                        (_ :
                                                          ∀ {a b : K},
                                                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
                                zero_mem' := (_ : ∃ x x_1 y x_2, x / y = 0) }.toSubmonoid.toSubsemigroup.carrier →
                      -x ∈
                        {
                                toSubmonoid :=
                                  {
                                    toSubsemigroup :=
                                      { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                        mul_mem' :=
                                          (_ :
                                            ∀ {a b : K},
                                              a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                  a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                    one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) },
                                add_mem' :=
                                  (_ :
                                    ∀ {a b : K},
                                      a ∈
                                          {
                                                toSubsemigroup :=
                                                  { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                    mul_mem' :=
                                                      (_ :
                                                        ∀ {a b : K},
                                                          a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                            b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                              a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                        b ∈
                                            {
                                                  toSubsemigroup :=
                                                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                      mul_mem' :=
                                                        (_ :
                                                          ∀ {a b : K},
                                                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier →
                                          a + b ∈
                                            {
                                                  toSubsemigroup :=
                                                    { carrier := {z | ∃ x x_1 y x_2, x / y = z},
                                                      mul_mem' :=
                                                        (_ :
                                                          ∀ {a b : K},
                                                            a ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                              b ∈ {z | ∃ x x_1 y x_2, x / y = z} →
                                                                a * b ∈ {z | ∃ x x_1 y x_2, x / y = z}) },
                                                  one_mem' := (_ : ∃ x x_1 y x_2, x / y = 1) }.toSubsemigroup.carrier),
                                zero_mem' :=
                                  (_ :
                                    ∃ x x_1 y x_2,
                                      x / y =
                                        0) }.toSubmonoid.toSubsemigroup.carrier) }.toSubsemiring.toSubmonoid.toSubsemigroup.carrier
[PROOFSTEP]
exact ⟨z, hz, y, hy, x_eq ▸ (inv_div _ _).symm⟩
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
x : K
⊢ x ∈ closure s ↔ ∃ y, y ∈ Subring.closure s ∧ ∃ z, z ∈ Subring.closure s ∧ y / z = x
[PROOFSTEP]
change x ∈ (closure s).carrier ↔ ∃ y ∈ Subring.closure s, ∃ z ∈ Subring.closure s, y / z = x
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
x : K
⊢ x ∈ (closure s).toSubring.toSubsemiring.toSubmonoid.toSubsemigroup.carrier ↔
    ∃ y, y ∈ Subring.closure s ∧ ∃ z, z ∈ Subring.closure s ∧ y / z = x
[PROOFSTEP]
simp only [closure, exists_prop, Set.mem_setOf_eq]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
Hs : ∀ (x : K), x ∈ s → p x
H1 : p 1
Hadd : ∀ (x y : K), p x → p y → p (x + y)
Hneg : ∀ (x : K), p x → p (-x)
Hinv : ∀ (x : K), p x → p x⁻¹
Hmul : ∀ (x y : K), p x → p y → p (x * y)
⊢ p x
[PROOFSTEP]
letI : Subfield K :=
  ⟨⟨⟨⟨⟨p, by intro _ _; exact Hmul _ _⟩, H1⟩, by intro _ _; exact Hadd _ _,
        @add_neg_self K _ 1 ▸ Hadd _ _ H1 (Hneg _ H1)⟩,
      by intro _; exact Hneg _⟩,
    Hinv⟩
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
Hs : ∀ (x : K), x ∈ s → p x
H1 : p 1
Hadd : ∀ (x y : K), p x → p y → p (x + y)
Hneg : ∀ (x : K), p x → p (-x)
Hinv : ∀ (x : K), p x → p x⁻¹
Hmul : ∀ (x y : K), p x → p y → p (x * y)
⊢ ∀ {a b : K}, a ∈ p → b ∈ p → a * b ∈ p
[PROOFSTEP]
intro _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
Hs : ∀ (x : K), x ∈ s → p x
H1 : p 1
Hadd : ∀ (x y : K), p x → p y → p (x + y)
Hneg : ∀ (x : K), p x → p (-x)
Hinv : ∀ (x : K), p x → p x⁻¹
Hmul : ∀ (x y : K), p x → p y → p (x * y)
a✝ b✝ : K
⊢ a✝ ∈ p → b✝ ∈ p → a✝ * b✝ ∈ p
[PROOFSTEP]
exact Hmul _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
Hs : ∀ (x : K), x ∈ s → p x
H1 : p 1
Hadd : ∀ (x y : K), p x → p y → p (x + y)
Hneg : ∀ (x : K), p x → p (-x)
Hinv : ∀ (x : K), p x → p x⁻¹
Hmul : ∀ (x y : K), p x → p y → p (x * y)
⊢ ∀ {a b : K},
    a ∈
        { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
              one_mem' := H1 }.toSubsemigroup.carrier →
      b ∈
          { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
                one_mem' := H1 }.toSubsemigroup.carrier →
        a + b ∈
          { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
                one_mem' := H1 }.toSubsemigroup.carrier
[PROOFSTEP]
intro _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
Hs : ∀ (x : K), x ∈ s → p x
H1 : p 1
Hadd : ∀ (x y : K), p x → p y → p (x + y)
Hneg : ∀ (x : K), p x → p (-x)
Hinv : ∀ (x : K), p x → p x⁻¹
Hmul : ∀ (x y : K), p x → p y → p (x * y)
a✝ b✝ : K
⊢ a✝ ∈
      { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
            one_mem' := H1 }.toSubsemigroup.carrier →
    b✝ ∈
        { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
              one_mem' := H1 }.toSubsemigroup.carrier →
      a✝ + b✝ ∈
        { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
              one_mem' := H1 }.toSubsemigroup.carrier
[PROOFSTEP]
exact Hadd _ _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
Hs : ∀ (x : K), x ∈ s → p x
H1 : p 1
Hadd : ∀ (x y : K), p x → p y → p (x + y)
Hneg : ∀ (x : K), p x → p (-x)
Hinv : ∀ (x : K), p x → p x⁻¹
Hmul : ∀ (x y : K), p x → p y → p (x * y)
⊢ ∀ {x : K},
    x ∈
        {
                toSubmonoid :=
                  { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
                    one_mem' := H1 },
                add_mem' := (_ : ∀ {a b : K}, p a → p b → p (a + b)),
                zero_mem' := (_ : p 0) }.toSubmonoid.toSubsemigroup.carrier →
      -x ∈
        {
                toSubmonoid :=
                  { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
                    one_mem' := H1 },
                add_mem' := (_ : ∀ {a b : K}, p a → p b → p (a + b)),
                zero_mem' := (_ : p 0) }.toSubmonoid.toSubsemigroup.carrier
[PROOFSTEP]
intro _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
Hs : ∀ (x : K), x ∈ s → p x
H1 : p 1
Hadd : ∀ (x y : K), p x → p y → p (x + y)
Hneg : ∀ (x : K), p x → p (-x)
Hinv : ∀ (x : K), p x → p x⁻¹
Hmul : ∀ (x y : K), p x → p y → p (x * y)
x✝ : K
⊢ x✝ ∈
      {
              toSubmonoid :=
                { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
                  one_mem' := H1 },
              add_mem' := (_ : ∀ {a b : K}, p a → p b → p (a + b)),
              zero_mem' := (_ : p 0) }.toSubmonoid.toSubsemigroup.carrier →
    -x✝ ∈
      {
              toSubmonoid :=
                { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
                  one_mem' := H1 },
              add_mem' := (_ : ∀ {a b : K}, p a → p b → p (a + b)),
              zero_mem' := (_ : p 0) }.toSubmonoid.toSubsemigroup.carrier
[PROOFSTEP]
exact Hneg _
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
Hs : ∀ (x : K), x ∈ s → p x
H1 : p 1
Hadd : ∀ (x y : K), p x → p y → p (x + y)
Hneg : ∀ (x : K), p x → p (-x)
Hinv : ∀ (x : K), p x → p x⁻¹
Hmul : ∀ (x y : K), p x → p y → p (x * y)
this : Subfield K :=
  {
    toSubring :=
      {
        toSubsemiring :=
          {
            toSubmonoid :=
              { toSubsemigroup := { carrier := p, mul_mem' := (_ : ∀ {a b : K}, p a → p b → p (a * b)) },
                one_mem' := H1 },
            add_mem' := (_ : ∀ {a b : K}, p a → p b → p (a + b)), zero_mem' := (_ : p 0) },
        neg_mem' := (_ : ∀ {x : K}, p x → p (-x)) },
    inv_mem' := Hinv }
⊢ p x
[PROOFSTEP]
exact (closure_le (t := this)).2 Hs h
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x : K
⊢ x ∈ ⨆ (i : ι), S i ↔ ∃ i, x ∈ S i
[PROOFSTEP]
refine' ⟨_, fun ⟨i, hi⟩ => (SetLike.le_def.1 <| le_iSup S i) hi⟩
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x : K
⊢ x ∈ ⨆ (i : ι), S i → ∃ i, x ∈ S i
[PROOFSTEP]
suffices x ∈ closure (⋃ i, (S i : Set K)) → ∃ i, x ∈ S i by simpa only [closure_iUnion, closure_eq]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x : K
this : x ∈ closure (⋃ (i : ι), ↑(S i)) → ∃ i, x ∈ S i
⊢ x ∈ ⨆ (i : ι), S i → ∃ i, x ∈ S i
[PROOFSTEP]
simpa only [closure_iUnion, closure_eq]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x : K
⊢ x ∈ closure (⋃ (i : ι), ↑(S i)) → ∃ i, x ∈ S i
[PROOFSTEP]
refine' fun hx => closure_induction hx (fun x => Set.mem_iUnion.mp) _ _ _ _ _
[GOAL]
case refine'_1
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x : K
hx : x ∈ closure (⋃ (i : ι), ↑(S i))
⊢ ∃ i, 1 ∈ S i
[PROOFSTEP]
exact hι.elim fun i => ⟨i, (S i).one_mem⟩
[GOAL]
case refine'_2
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x : K
hx : x ∈ closure (⋃ (i : ι), ↑(S i))
⊢ ∀ (x y : K), (∃ i, x ∈ S i) → (∃ i, y ∈ S i) → ∃ i, x + y ∈ S i
[PROOFSTEP]
rintro x y ⟨i, hi⟩ ⟨j, hj⟩
[GOAL]
case refine'_2.intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x✝ : K
hx : x✝ ∈ closure (⋃ (i : ι), ↑(S i))
x y : K
i : ι
hi : x ∈ S i
j : ι
hj : y ∈ S j
⊢ ∃ i, x + y ∈ S i
[PROOFSTEP]
obtain ⟨k, hki, hkj⟩ := hS i j
[GOAL]
case refine'_2.intro.intro.intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x✝ : K
hx : x✝ ∈ closure (⋃ (i : ι), ↑(S i))
x y : K
i : ι
hi : x ∈ S i
j : ι
hj : y ∈ S j
k : ι
hki : S i ≤ S k
hkj : S j ≤ S k
⊢ ∃ i, x + y ∈ S i
[PROOFSTEP]
exact ⟨k, (S k).add_mem (hki hi) (hkj hj)⟩
[GOAL]
case refine'_3
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x : K
hx : x ∈ closure (⋃ (i : ι), ↑(S i))
⊢ ∀ (x : K), (∃ i, x ∈ S i) → ∃ i, -x ∈ S i
[PROOFSTEP]
rintro x ⟨i, hi⟩
[GOAL]
case refine'_3.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x✝ : K
hx : x✝ ∈ closure (⋃ (i : ι), ↑(S i))
x : K
i : ι
hi : x ∈ S i
⊢ ∃ i, -x ∈ S i
[PROOFSTEP]
exact ⟨i, (S i).neg_mem hi⟩
[GOAL]
case refine'_4
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x : K
hx : x ∈ closure (⋃ (i : ι), ↑(S i))
⊢ ∀ (x : K), (∃ i, x ∈ S i) → ∃ i, x⁻¹ ∈ S i
[PROOFSTEP]
rintro x ⟨i, hi⟩
[GOAL]
case refine'_4.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x✝ : K
hx : x✝ ∈ closure (⋃ (i : ι), ↑(S i))
x : K
i : ι
hi : x ∈ S i
⊢ ∃ i, x⁻¹ ∈ S i
[PROOFSTEP]
exact ⟨i, (S i).inv_mem hi⟩
[GOAL]
case refine'_5
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x : K
hx : x ∈ closure (⋃ (i : ι), ↑(S i))
⊢ ∀ (x y : K), (∃ i, x ∈ S i) → (∃ i, y ∈ S i) → ∃ i, x * y ∈ S i
[PROOFSTEP]
rintro x y ⟨i, hi⟩ ⟨j, hj⟩
[GOAL]
case refine'_5.intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x✝ : K
hx : x✝ ∈ closure (⋃ (i : ι), ↑(S i))
x y : K
i : ι
hi : x ∈ S i
j : ι
hj : y ∈ S j
⊢ ∃ i, x * y ∈ S i
[PROOFSTEP]
obtain ⟨k, hki, hkj⟩ := hS i j
[GOAL]
case refine'_5.intro.intro.intro.intro
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x✝ : K
hx : x✝ ∈ closure (⋃ (i : ι), ↑(S i))
x y : K
i : ι
hi : x ∈ S i
j : ι
hj : y ∈ S j
k : ι
hki : S i ≤ S k
hkj : S j ≤ S k
⊢ ∃ i, x * y ∈ S i
[PROOFSTEP]
exact ⟨k, (S k).mul_mem (hki hi) (hkj hj)⟩
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
ι : Sort u_1
hι : Nonempty ι
S : ι → Subfield K
hS : Directed (fun x x_1 => x ≤ x_1) S
x : K
⊢ x ∈ ↑(⨆ (i : ι), S i) ↔ x ∈ ⋃ (i : ι), ↑(S i)
[PROOFSTEP]
simp [mem_iSup_of_directed hS]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
Sne : Set.Nonempty S
hS : DirectedOn (fun x x_1 => x ≤ x_1) S
x : K
⊢ x ∈ sSup S ↔ ∃ s, s ∈ S ∧ x ∈ s
[PROOFSTEP]
haveI : Nonempty S := Sne.to_subtype
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
Sne : Set.Nonempty S
hS : DirectedOn (fun x x_1 => x ≤ x_1) S
x : K
this : Nonempty ↑S
⊢ x ∈ sSup S ↔ ∃ s, s ∈ S ∧ x ∈ s
[PROOFSTEP]
simp only [sSup_eq_iSup', mem_iSup_of_directed hS.directed_val, Subtype.exists, exists_prop]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
S : Set (Subfield K)
Sne : Set.Nonempty S
hS : DirectedOn (fun x x_1 => x ≤ x_1) S
x : K
⊢ x ∈ ↑(sSup S) ↔ x ∈ ⋃ (s : Subfield K) (_ : s ∈ S), ↑s
[PROOFSTEP]
simp [mem_sSup_of_directedOn Sne hS]
[GOAL]
K : Type u
L : Type v
M : Type w
inst✝² : Field K
inst✝¹ : Field L
inst✝ : Field M
s : Subfield K
f g : K →+* L
src✝ : Subring K := eqLocus f g
x : K
hx : ↑f x = ↑g x
⊢ ↑f x⁻¹ = ↑g x⁻¹
[PROOFSTEP]
rw [map_inv₀ f, map_inv₀ g, hx]


[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : Zero N
f✝ g✝ f g : α →₀ N
a : α
⊢ a ∈ neLocus f g ↔ ↑f a ≠ ↑g a
[PROOFSTEP]
simpa only [neLocus, Finset.mem_filter, Finset.mem_union, mem_support_iff, and_iff_right_iff_imp] using Ne.ne_or_ne _
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : Zero N
f g : α →₀ N
⊢ ↑(neLocus f g) = {x | ↑f x ≠ ↑g x}
[PROOFSTEP]
ext
[GOAL]
case h
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : Zero N
f g : α →₀ N
x✝ : α
⊢ x✝ ∈ ↑(neLocus f g) ↔ x✝ ∈ {x | ↑f x ≠ ↑g x}
[PROOFSTEP]
exact mem_neLocus
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : Zero N
f✝ g✝ f g : α →₀ N
h : f = g
⊢ neLocus f f = ∅
[PROOFSTEP]
simp only [neLocus, Ne.def, eq_self_iff_true, not_true, Finset.filter_False]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : Zero N
f g : α →₀ N
⊢ neLocus f g = neLocus g f
[PROOFSTEP]
simp_rw [neLocus, Finset.union_comm, ne_comm]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : Zero N
f g : α →₀ N
⊢ neLocus f 0 = f.support
[PROOFSTEP]
ext
[GOAL]
case a
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : Zero N
f g : α →₀ N
a✝ : α
⊢ a✝ ∈ neLocus f 0 ↔ a✝ ∈ f.support
[PROOFSTEP]
rw [mem_neLocus, mem_support_iff, coe_zero, Pi.zero_apply]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁴ : DecidableEq α
inst✝³ : DecidableEq N
inst✝² : Zero N
inst✝¹ : DecidableEq M
inst✝ : Zero M
f g : α →₀ N
F : N → M
F0 : F 0 = 0
x : α
⊢ x ∈ neLocus (mapRange F F0 f) (mapRange F F0 g) → x ∈ neLocus f g
[PROOFSTEP]
simpa only [mem_neLocus, mapRange_apply, not_imp_not] using congr_arg F
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁵ : DecidableEq α
inst✝⁴ : DecidableEq N
inst✝³ : Zero M
inst✝² : DecidableEq P
inst✝¹ : Zero P
inst✝ : Zero N
F : M → N → P
F0 : F 0 0 = 0
f : α →₀ M
g₁ g₂ : α →₀ N
hF : ∀ (f : M), Function.Injective fun g => F f g
⊢ neLocus (zipWith F F0 f g₁) (zipWith F F0 f g₂) = neLocus g₁ g₂
[PROOFSTEP]
ext
[GOAL]
case a
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁵ : DecidableEq α
inst✝⁴ : DecidableEq N
inst✝³ : Zero M
inst✝² : DecidableEq P
inst✝¹ : Zero P
inst✝ : Zero N
F : M → N → P
F0 : F 0 0 = 0
f : α →₀ M
g₁ g₂ : α →₀ N
hF : ∀ (f : M), Function.Injective fun g => F f g
a✝ : α
⊢ a✝ ∈ neLocus (zipWith F F0 f g₁) (zipWith F F0 f g₂) ↔ a✝ ∈ neLocus g₁ g₂
[PROOFSTEP]
simpa only [mem_neLocus] using (hF _).ne_iff
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁵ : DecidableEq α
inst✝⁴ : DecidableEq M
inst✝³ : Zero M
inst✝² : DecidableEq P
inst✝¹ : Zero P
inst✝ : Zero N
F : M → N → P
F0 : F 0 0 = 0
f₁ f₂ : α →₀ M
g : α →₀ N
hF : ∀ (g : N), Function.Injective fun f => F f g
⊢ neLocus (zipWith F F0 f₁ g) (zipWith F F0 f₂ g) = neLocus f₁ f₂
[PROOFSTEP]
ext
[GOAL]
case a
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁵ : DecidableEq α
inst✝⁴ : DecidableEq M
inst✝³ : Zero M
inst✝² : DecidableEq P
inst✝¹ : Zero P
inst✝ : Zero N
F : M → N → P
F0 : F 0 0 = 0
f₁ f₂ : α →₀ M
g : α →₀ N
hF : ∀ (g : N), Function.Injective fun f => F f g
a✝ : α
⊢ a✝ ∈ neLocus (zipWith F F0 f₁ g) (zipWith F F0 f₂ g) ↔ a✝ ∈ neLocus f₁ f₂
[PROOFSTEP]
simpa only [mem_neLocus] using (hF _).ne_iff
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁴ : DecidableEq α
inst✝³ : DecidableEq N
inst✝² : DecidableEq M
inst✝¹ : Zero M
inst✝ : Zero N
f g : α →₀ N
F : N → M
F0 : F 0 = 0
hF : Function.Injective F
⊢ neLocus (mapRange F F0 f) (mapRange F F0 g) = neLocus f g
[PROOFSTEP]
ext
[GOAL]
case a
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝⁴ : DecidableEq α
inst✝³ : DecidableEq N
inst✝² : DecidableEq M
inst✝¹ : Zero M
inst✝ : Zero N
f g : α →₀ N
F : N → M
F0 : F 0 = 0
hF : Function.Injective F
a✝ : α
⊢ a✝ ∈ neLocus (mapRange F F0 f) (mapRange F F0 g) ↔ a✝ ∈ neLocus f g
[PROOFSTEP]
simpa only [mem_neLocus] using hF.ne_iff
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : AddGroup N
f f₁ f₂ g g₁ g₂ : α →₀ N
⊢ neLocus (-f) g = neLocus f (-g)
[PROOFSTEP]
rw [← neLocus_neg_neg, neg_neg]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : AddGroup N
f f₁ f₂ g g₁ g₂ : α →₀ N
⊢ neLocus f g = (f - g).support
[PROOFSTEP]
rw [← neLocus_add_right _ _ (-g), add_right_neg, neLocus_zero_right, sub_eq_add_neg]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : AddGroup N
f f₁ f₂ g g₁ g₂ : α →₀ N
⊢ neLocus (f - g₁) (f - g₂) = neLocus g₁ g₂
[PROOFSTEP]
simp only [sub_eq_add_neg, neLocus_add_left, neLocus_neg_neg]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : AddGroup N
f f₁ f₂ g g₁ g₂ : α →₀ N
⊢ neLocus (f₁ - g) (f₂ - g) = neLocus f₁ f₂
[PROOFSTEP]
simpa only [sub_eq_add_neg] using neLocus_add_right _ _ _
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : AddGroup N
f f₁ f₂ g g₁ g₂ : α →₀ N
⊢ neLocus f (f + g) = g.support
[PROOFSTEP]
rw [← neLocus_zero_left, ← neLocus_add_left f 0 g, add_zero]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : AddGroup N
f f₁ f₂ g g₁ g₂ : α →₀ N
⊢ neLocus (f + g) f = g.support
[PROOFSTEP]
rw [neLocus_comm, neLocus_self_add_right]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : AddGroup N
f f₁ f₂ g g₁ g₂ : α →₀ N
⊢ neLocus f (f - g) = g.support
[PROOFSTEP]
rw [sub_eq_add_neg, neLocus_self_add_right, support_neg]
[GOAL]
α : Type u_1
M : Type u_2
N : Type u_3
P : Type u_4
inst✝² : DecidableEq α
inst✝¹ : DecidableEq N
inst✝ : AddGroup N
f f₁ f₂ g g₁ g₂ : α →₀ N
⊢ neLocus (f - g) f = g.support
[PROOFSTEP]
rw [neLocus_comm, neLocus_self_sub_right]