Theorem: Subfield.closure_induction
File: Mathlib/Algebra/Field/Subfield.lean

tactic: letI : Subfield K :=
  ⟨⟨⟨⟨⟨p, by intro _ _; exact mul _ _⟩, one⟩,
    by intro _ _; exact add _ _, @add_neg_self K _ 1 ▸ add _ _ one (neg _ one)⟩,
      by intro _; exact neg _⟩, inv⟩
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
⊢ p x
state_after: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
this : Subfield K :=
  { carrier := p, mul_mem' := ⋯, one_mem' := one, add_mem' := ⋯, zero_mem' := ⋯, neg_mem' := ⋯, inv_mem' := inv }
⊢ p x

tactic: exact (closure_le (t := this)).2 mem h
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
this : Subfield K :=
  { carrier := p, mul_mem' := ⋯, one_mem' := one, add_mem' := ⋯, zero_mem' := ⋯, neg_mem' := ⋯, inv_mem' := inv }
⊢ p x
state_after: no goals

tactic: intro _ _
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
⊢ ∀ {a b : K}, a ∈ p → b ∈ p → a * b ∈ p
state_after: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
a✝ b✝ : K
⊢ a✝ ∈ p → b✝ ∈ p → a✝ * b✝ ∈ p

tactic: exact mul _ _
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
a✝ b✝ : K
⊢ a✝ ∈ p → b✝ ∈ p → a✝ * b✝ ∈ p
state_after: no goals

tactic: intro _ _
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
⊢ ∀ {a b : K},
    a ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one }.carrier →
      b ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one }.carrier →
        a + b ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one }.carrier
state_after: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
a✝ b✝ : K
⊢ a✝ ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one }.carrier →
    b✝ ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one }.carrier →
      a✝ + b✝ ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one }.carrier

tactic: exact add _ _
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
a✝ b✝ : K
⊢ a✝ ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one }.carrier →
    b✝ ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one }.carrier →
      a✝ + b✝ ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one }.carrier
state_after: no goals

tactic: intro _
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
⊢ ∀ {x : K},
    x ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one, add_mem' := ⋯, zero_mem' := ⋯ }.carrier →
      -x ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one, add_mem' := ⋯, zero_mem' := ⋯ }.carrier
state_after: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
x✝ : K
⊢ x✝ ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one, add_mem' := ⋯, zero_mem' := ⋯ }.carrier →
    -x✝ ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one, add_mem' := ⋯, zero_mem' := ⋯ }.carrier

tactic: exact neg _
state_before: K : Type u
L : Type v
M : Type w
inst✝² : DivisionRing K
inst✝¹ : DivisionRing L
inst✝ : DivisionRing M
s : Set K
p : K → Prop
x : K
h : x ∈ closure s
mem : ∀ x ∈ s, p x
one : p 1
add : ∀ (x y : K), p x → p y → p (x + y)
neg : ∀ (x : K), p x → p (-x)
inv : ∀ (x : K), p x → p x⁻¹
mul : ∀ (x y : K), p x → p y → p (x * y)
x✝ : K
⊢ x✝ ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one, add_mem' := ⋯, zero_mem' := ⋯ }.carrier →
    -x✝ ∈ { carrier := p, mul_mem' := ⋯, one_mem' := one, add_mem' := ⋯, zero_mem' := ⋯ }.carrier
state_after: no goals