ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- PFunctor.liftp_iff
theorem liftp_iff {α : Type u} (p : α → Prop) (x : P α) :
    Liftp p x ↔ ∃ a f, x = ⟨a, f⟩ ∧ ∀ i, p (f i) 
Arguments: {P : PFunctor.{u}} {α : Type u} (p : α → Prop) (x : ↑P α)
Goal: Functor.Liftp p x ↔ ∃ a f, x = ⟨a, f⟩ ∧ ∀ (i : P.B a), p (f i)
-- PFunctor.liftp_iff'
theorem liftp_iff' {α : Type u} (p : α → Prop) (a : P.A) (f : P.B a → α) :
    @Liftp.{u} P.Obj _ α p ⟨a, f⟩ ↔ ∀ i, p (f i) 
Arguments: {P : PFunctor.{u}} {α : Type u} (p : α → Prop) (a : P.A) (f : P.B a → α)
Goal: Functor.Liftp p ⟨a, f⟩ ↔ ∀ (i : P.B a), p (f i)
-- PFunctor.liftr_iff
theorem liftr_iff {α : Type u} (r : α → α → Prop) (x y : P α) :
    Liftr r x y ↔ ∃ a f₀ f₁, x = ⟨a, f₀⟩ ∧ y = ⟨a, f₁⟩ ∧ ∀ i, r (f₀ i) (f₁ i) 
Arguments: {P : PFunctor.{u}} {α : Type u} (r : α → α → Prop) (x y : ↑P α)
Goal: Functor.Liftr r x y ↔ ∃ a f₀ f₁, x = ⟨a, f₀⟩ ∧ y = ⟨a, f₁⟩ ∧ ∀ (i : P.B a), r (f₀ i) (f₁ i)
-- PFunctor.supp_eq
theorem supp_eq {α : Type u} (a : P.A) (f : P.B a → α) :
    @supp.{u} P.Obj _ α (⟨a, f⟩ : P α) = f '' univ 
Arguments: {P : PFunctor.{u}} {α : Type u} (a : P.A) (f : P.B a → α)
Goal: Functor.supp ⟨a, f⟩ = f '' Set.univ
-- WeierstrassCurve.Projective.fin3_def
lemma fin3_def {R : Type u} (P : Fin 3 → R) : P = ![P x, P y, P z] 
Arguments: {R : Type u} (P : Fin 3 → R)
Goal: P = ![P 0, P 1, P 2]
-- WeierstrassCurve.Projective.smul_fin3
lemma smul_fin3 {R : Type u} [CommRing R] (P : Fin 3 → R) (u : Rˣ) :
    u • P = ![u * P x, u * P y, u * P z] 
Arguments: {R : Type u} [CommRing R] (P : Fin 3 → R) (u : Rˣ)
Goal: u • P = ![↑u * P 0, ↑u * P 1, ↑u * P 2]
-- WeierstrassCurve.Projective.smul_fin3_ext
lemma smul_fin3_ext {R : Type u} [CommRing R] (P : Fin 3 → R) (u : Rˣ) :
    (u • P) x = u * P x ∧ (u • P) y = u * P y ∧ (u • P) z = u * P z 
Arguments: {R : Type u} [CommRing R] (P : Fin 3 → R) (u : Rˣ)
Goal: (u • P) 0 = ↑u * P 0 ∧ (u • P) 1 = ↑u * P 1 ∧ (u • P) 2 = ↑u * P 2
-- WeierstrassCurve.Projective.eval_polynomial
lemma eval_polynomial (P : Fin 3 → R) : eval P W.polynomial =
    P y ^ 2 * P z + W.a₁ * P x * P y * P z + W.a₃ * P y * P z ^ 2
      - (P x ^ 3 + W.a₂ * P x ^ 2 * P z + W.a₄ * P x * P z ^ 2 + W.a₆ * P z ^ 3) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (P : Fin 3 → R)
Goal: (MvPolynomial.eval P) W.polynomial =
  P 1 ^ 2 * P 2 + W.a₁ * P 0 * P 1 * P 2 + W.a₃ * P 1 * P 2 ^ 2 -
    (P 0 ^ 3 + W.a₂ * P 0 ^ 2 * P 2 + W.a₄ * P 0 * P 2 ^ 2 + W.a₆ * P 2 ^ 3)
-- WeierstrassCurve.Projective.equation_iff
lemma equation_iff (P : Fin 3 → R) : W.Equation P ↔
    P y ^ 2 * P z + W.a₁ * P x * P y * P z + W.a₃ * P y * P z ^ 2
      = P x ^ 3 + W.a₂ * P x ^ 2 * P z + W.a₄ * P x * P z ^ 2 + W.a₆ * P z ^ 3 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (P : Fin 3 → R)
Goal: W.Equation P ↔
  P 1 ^ 2 * P 2 + W.a₁ * P 0 * P 1 * P 2 + W.a₃ * P 1 * P 2 ^ 2 =
    P 0 ^ 3 + W.a₂ * P 0 ^ 2 * P 2 + W.a₄ * P 0 * P 2 ^ 2 + W.a₆ * P 2 ^ 3
-- WeierstrassCurve.Projective.equation_zero
lemma equation_zero (Y : R) : W.Equation ![0, Y, 0] 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (Y : R)
Goal: W.Equation ![0, Y, 0]
-- WeierstrassCurve.Projective.equation_some
lemma equation_some (X Y : R) : W.Equation ![X, Y, 1] ↔ W.toAffine.Equation X Y 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (X Y : R)
Goal: W.Equation ![X, Y, 1] ↔ W.toAffine.Equation X Y
-- WeierstrassCurve.Projective.equation_smul_iff
lemma equation_smul_iff (P : Fin 3 → R) (u : Rˣ) : W.Equation (u • P) ↔ W.Equation P 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (P : Fin 3 → R) (u : Rˣ)
Goal: W.Equation (u • P) ↔ W.Equation P
-- WeierstrassCurve.Projective.polynomialX_eq
lemma polynomialX_eq : W.polynomialX =
    C W.a₁ * X 1 * X 2 - (C 3 * X 0 ^ 2 + C (2 * W.a₂) * X 0 * X 2 + C W.a₄ * X 2 ^ 2) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R)
Goal: W.polynomialX =
  MvPolynomial.C W.a₁ * MvPolynomial.X 1 * MvPolynomial.X 2 -
    (MvPolynomial.C 3 * MvPolynomial.X 0 ^ 2 + MvPolynomial.C (2 * W.a₂) * MvPolynomial.X 0 * MvPolynomial.X 2 +
      MvPolynomial.C W.a₄ * MvPolynomial.X 2 ^ 2)
-- WeierstrassCurve.Projective.eval_polynomialX
lemma eval_polynomialX (P : Fin 3 → R) : eval P W.polynomialX =
    W.a₁ * P y * P z - (3 * P x ^ 2 + 2 * W.a₂ * P x * P z + W.a₄ * P z ^ 2) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (P : Fin 3 → R)
Goal: (MvPolynomial.eval P) W.polynomialX = W.a₁ * P 1 * P 2 - (3 * P 0 ^ 2 + 2 * W.a₂ * P 0 * P 2 + W.a₄ * P 2 ^ 2)
-- WeierstrassCurve.Projective.polynomialY_eq
lemma polynomialY_eq : W.polynomialY =
    C 2 * X 1 * X 2 + C W.a₁ * X 0 * X 2 + C W.a₃ * X 2 ^ 2 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R)
Goal: W.polynomialY =
  MvPolynomial.C 2 * MvPolynomial.X 1 * MvPolynomial.X 2 + MvPolynomial.C W.a₁ * MvPolynomial.X 0 * MvPolynomial.X 2 +
    MvPolynomial.C W.a₃ * MvPolynomial.X 2 ^ 2
-- WeierstrassCurve.Projective.eval_polynomialY
lemma eval_polynomialY (P : Fin 3 → R) :
    eval P W.polynomialY = 2 * P y * P z + W.a₁ * P x * P z + W.a₃ * P z ^ 2 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (P : Fin 3 → R)
Goal: (MvPolynomial.eval P) W.polynomialY = 2 * P 1 * P 2 + W.a₁ * P 0 * P 2 + W.a₃ * P 2 ^ 2
-- WeierstrassCurve.Projective.polynomialZ_eq
lemma polynomialZ_eq : W.polynomialZ =
    X 1 ^ 2 + C W.a₁ * X 0 * X 1 + C (2 * W.a₃) * X 1 * X 2
      - (C W.a₂ * X 0 ^ 2 + C (2 * W.a₄) * X 0 * X 2 + C (3 * W.a₆) * X 2 ^ 2) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R)
Goal: W.polynomialZ =
  MvPolynomial.X 1 ^ 2 + MvPolynomial.C W.a₁ * MvPolynomial.X 0 * MvPolynomial.X 1 +
      MvPolynomial.C (2 * W.a₃) * MvPolynomial.X 1 * MvPolynomial.X 2 -
    (MvPolynomial.C W.a₂ * MvPolynomial.X 0 ^ 2 + MvPolynomial.C (2 * W.a₄) * MvPolynomial.X 0 * MvPolynomial.X 2 +
      MvPolynomial.C (3 * W.a₆) * MvPolynomial.X 2 ^ 2)
-- WeierstrassCurve.Projective.eval_polynomialZ
lemma eval_polynomialZ (P : Fin 3 → R) : eval P W.polynomialZ =
    P y ^ 2 + W.a₁ * P x * P y + 2 * W.a₃ * P y * P z
      - (W.a₂ * P x ^ 2 + 2 * W.a₄ * P x * P z + 3 * W.a₆ * P z ^ 2) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (P : Fin 3 → R)
Goal: (MvPolynomial.eval P) W.polynomialZ =
  P 1 ^ 2 + W.a₁ * P 0 * P 1 + 2 * W.a₃ * P 1 * P 2 - (W.a₂ * P 0 ^ 2 + 2 * W.a₄ * P 0 * P 2 + 3 * W.a₆ * P 2 ^ 2)
-- WeierstrassCurve.Projective.polynomial_relation
theorem polynomial_relation (P : Fin 3 → R) : 3 * eval P W.polynomial =
    P x * eval P W.polynomialX + P y * eval P W.polynomialY + P z * eval P W.polynomialZ 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (P : Fin 3 → R)
Goal: 3 * (MvPolynomial.eval P) W.polynomial =
  P 0 * (MvPolynomial.eval P) W.polynomialX + P 1 * (MvPolynomial.eval P) W.polynomialY +
    P 2 * (MvPolynomial.eval P) W.polynomialZ
-- WeierstrassCurve.Projective.nonsingular_iff
lemma nonsingular_iff (P : Fin 3 → R) : W.Nonsingular P ↔ W.Equation P ∧
    (W.a₁ * P y * P z ≠ 3 * P x ^ 2 + 2 * W.a₂ * P x * P z + W.a₄ * P z ^ 2 ∨
      P y * P z ≠ -P y * P z - W.a₁ * P x * P z - W.a₃ * P z ^ 2 ∨
      P y ^ 2 + W.a₁ * P x * P y + 2 * W.a₃ * P y * P z
        ≠ W.a₂ * P x ^ 2 + 2 * W.a₄ * P x * P z + 3 * W.a₆ * P z ^ 2) 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (P : Fin 3 → R)
Goal: W.Nonsingular P ↔
  W.Equation P ∧
    (W.a₁ * P 1 * P 2 ≠ 3 * P 0 ^ 2 + 2 * W.a₂ * P 0 * P 2 + W.a₄ * P 2 ^ 2 ∨
      P 1 * P 2 ≠ -P 1 * P 2 - W.a₁ * P 0 * P 2 - W.a₃ * P 2 ^ 2 ∨
        P 1 ^ 2 + W.a₁ * P 0 * P 1 + 2 * W.a₃ * P 1 * P 2 ≠ W.a₂ * P 0 ^ 2 + 2 * W.a₄ * P 0 * P 2 + 3 * W.a₆ * P 2 ^ 2)
-- WeierstrassCurve.Projective.nonsingular_zero
lemma nonsingular_zero [Nontrivial R] : W.Nonsingular ![0, 1, 0] 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) [Nontrivial R]
Goal: W.Nonsingular ![0, 1, 0]
-- WeierstrassCurve.Projective.nonsingular_zero'
lemma nonsingular_zero' [NoZeroDivisors R] {Y : R} (hy : Y ≠ 0) : W.Nonsingular ![0, Y, 0] 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) [NoZeroDivisors R] {Y : R} (hy : Y ≠ 0)
Goal: W.Nonsingular ![0, Y, 0]
-- WeierstrassCurve.Projective.nonsingular_some
lemma nonsingular_some (X Y : R) : W.Nonsingular ![X, Y, 1] ↔ W.toAffine.Nonsingular X Y 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (X Y : R)
Goal: W.Nonsingular ![X, Y, 1] ↔ W.toAffine.Nonsingular X Y
-- WeierstrassCurve.Projective.nonsingular_smul_iff
lemma nonsingular_smul_iff (P : Fin 3 → R) (u : Rˣ) : W.Nonsingular (u • P) ↔ W.Nonsingular P 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (P : Fin 3 → R) (u : Rˣ)
Goal: W.Nonsingular (u • P) ↔ W.Nonsingular P
-- WeierstrassCurve.Projective.nonsingular_of_equiv
lemma nonsingular_of_equiv {P Q : Fin 3 → R} (h : P ≈ Q) : W.Nonsingular P ↔ W.Nonsingular Q 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) {P Q : Fin 3 → R} (h : P ≈ Q)
Goal: W.Nonsingular P ↔ W.Nonsingular Q
-- WeierstrassCurve.Projective.nonsingularLift_iff
@[simp]
lemma nonsingularLift_iff (P : Fin 3 → R) : W.NonsingularLift ⟦P⟧ ↔ W.Nonsingular P 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (P : Fin 3 → R)
Goal: W.NonsingularLift ⟦P⟧ ↔ W.Nonsingular P
-- WeierstrassCurve.Projective.nonsingularLift_zero
lemma nonsingularLift_zero [Nontrivial R] : W.NonsingularLift ⟦![0, 1, 0]⟧ 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) [Nontrivial R]
Goal: W.NonsingularLift ⟦![0, 1, 0]⟧
-- WeierstrassCurve.Projective.nonsingularLift_zero'
lemma nonsingularLift_zero' [NoZeroDivisors R] {Y : R} (hy : Y ≠ 0) :
    W.NonsingularLift ⟦![0, Y, 0]⟧ 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) [NoZeroDivisors R] {Y : R} (hy : Y ≠ 0)
Goal: W.NonsingularLift ⟦![0, Y, 0]⟧
-- WeierstrassCurve.Projective.nonsingularLift_some
lemma nonsingularLift_some (X Y : R) :
    W.NonsingularLift ⟦![X, Y, 1]⟧ ↔ W.toAffine.Nonsingular X Y 
Arguments: {R : Type u} [CommRing R] (W : WeierstrassCurve.Projective R) (X Y : R)
Goal: W.NonsingularLift ⟦![X, Y, 1]⟧ ↔ W.toAffine.Nonsingular X Y
-- WeierstrassCurve.Projective.equiv_of_Z_eq_zero
lemma equiv_of_Z_eq_zero {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Nonsingular Q)
    (hPz : P z = 0) (hQz : Q z = 0) : P ≈ Q 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P Q : Fin 3 → F} (hP : W.Nonsingular P) (hQ : W.Nonsingular Q) (hPz : P 2 = 0) (hQz : Q 2 = 0)
Goal: P ≈ Q
-- WeierstrassCurve.Projective.equiv_zero_of_Z_eq_zero
lemma equiv_zero_of_Z_eq_zero {P : Fin 3 → F} (h : W.Nonsingular P) (hPz : P z = 0) :
    P ≈ ![0, 1, 0] 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P : Fin 3 → F} (h : W.Nonsingular P) (hPz : P 2 = 0)
Goal: P ≈ ![0, 1, 0]
-- WeierstrassCurve.Projective.equiv_some_of_Z_ne_zero
lemma equiv_some_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) : P ≈ ![P x / P z, P y / P z, 1] 
Arguments: {F : Type u} [Field F] {P : Fin 3 → F} (hPz : P 2 ≠ 0)
Goal: P ≈ ![P 0 / P 2, P 1 / P 2, 1]
-- WeierstrassCurve.Projective.nonsingular_iff_affine_of_Z_ne_zero
lemma nonsingular_iff_affine_of_Z_ne_zero {P : Fin 3 → F} (hPz : P z ≠ 0) :
    W.Nonsingular P ↔ W.toAffine.Nonsingular (P x / P z) (P y / P z) 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P : Fin 3 → F} (hPz : P 2 ≠ 0)
Goal: W.Nonsingular P ↔ W.toAffine.Nonsingular (P 0 / P 2) (P 1 / P 2)
-- WeierstrassCurve.Projective.nonsingular_of_affine_of_Z_ne_zero
lemma nonsingular_of_affine_of_Z_ne_zero {P : Fin 3 → F}
    (h : W.toAffine.Nonsingular (P x / P z) (P y / P z)) (hPz : P z ≠ 0) : W.Nonsingular P 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P : Fin 3 → F} (h : W.toAffine.Nonsingular (P 0 / P 2) (P 1 / P 2)) (hPz : P 2 ≠ 0)
Goal: W.Nonsingular P
-- WeierstrassCurve.Projective.nonsingular_affine_of_Z_ne_zero
lemma nonsingular_affine_of_Z_ne_zero {P : Fin 3 → F} (h : W.Nonsingular P) (hPz : P z ≠ 0) :
    W.toAffine.Nonsingular (P x / P z) (P y / P z) 
Arguments: {F : Type u} [Field F] {W : WeierstrassCurve.Projective F} {P : Fin 3 → F} (h : W.Nonsingular P) (hPz : P 2 ≠ 0)
Goal: W.toAffine.Nonsingular (P 0 / P 2) (P 1 / P 2)
-- MvPFunctor.wPathDestLeft_wPathCasesOn
theorem wPathDestLeft_wPathCasesOn {α : TypeVec n} {a : P.A} {f : P.last.B a → P.last.W}
    (g' : P.drop.B a ⟹ α) (g : ∀ j : P.last.B a, P.WPath (f j) ⟹ α) :
    P.wPathDestLeft (P.wPathCasesOn g' g) = g' 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {a : P.A} {f : P.last.B a → P.last.W} (g' : (P.drop.B a).Arrow α) (g : (j : P.last.B a) → TypeVec.Arrow (P.WPath (f j)) α)
Goal: P.wPathDestLeft (P.wPathCasesOn g' g) = g'
-- MvPFunctor.wPathDestRight_wPathCasesOn
theorem wPathDestRight_wPathCasesOn {α : TypeVec n} {a : P.A} {f : P.last.B a → P.last.W}
    (g' : P.drop.B a ⟹ α) (g : ∀ j : P.last.B a, P.WPath (f j) ⟹ α) :
    P.wPathDestRight (P.wPathCasesOn g' g) = g 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {a : P.A} {f : P.last.B a → P.last.W} (g' : (P.drop.B a).Arrow α) (g : (j : P.last.B a) → TypeVec.Arrow (P.WPath (f j)) α)
Goal: P.wPathDestRight (P.wPathCasesOn g' g) = g
-- MvPFunctor.wPathCasesOn_eta
theorem wPathCasesOn_eta {α : TypeVec n} {a : P.A} {f : P.last.B a → P.last.W}
    (h : P.WPath ⟨a, f⟩ ⟹ α) : P.wPathCasesOn (P.wPathDestLeft h) (P.wPathDestRight h) = h 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {a : P.A} {f : P.last.B a → P.last.W} (h : TypeVec.Arrow (P.WPath (WType.mk a f)) α)
Goal: P.wPathCasesOn (P.wPathDestLeft h) (P.wPathDestRight h) = h
-- MvPFunctor.comp_wPathCasesOn
theorem comp_wPathCasesOn {α β : TypeVec n} (h : α ⟹ β) {a : P.A} {f : P.last.B a → P.last.W}
    (g' : P.drop.B a ⟹ α) (g : ∀ j : P.last.B a, P.WPath (f j) ⟹ α) :
    h ⊚ P.wPathCasesOn g' g = P.wPathCasesOn (h ⊚ g') fun i => h ⊚ g i 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {β : TypeVec.{u_2} n} (h : α.Arrow β) {a : P.A} {f : P.last.B a → P.last.W} (g' : (P.drop.B a).Arrow α) (g : (j : P.last.B a) → TypeVec.Arrow (P.WPath (f j)) α)
Goal: TypeVec.comp h (P.wPathCasesOn g' g) = P.wPathCasesOn (TypeVec.comp h g') fun i => TypeVec.comp h (g i)
-- MvPFunctor.wpRec_eq
theorem wpRec_eq {α : TypeVec n} {C : Type*}
    (g : ∀ (a : P.A) (f : P.last.B a → P.last.W), P.WPath ⟨a, f⟩ ⟹ α → (P.last.B a → C) → C)
    (a : P.A) (f : P.last.B a → P.last.W) (f' : P.WPath ⟨a, f⟩ ⟹ α) :
    P.wpRec g ⟨a, f⟩ f' = g a f f' fun i => P.wpRec g (f i) (P.wPathDestRight f' i) 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_2} n} {C : Type u_1} (g : (a : P.A) → (f : P.last.B a → P.last.W) → TypeVec.Arrow (P.WPath (WType.mk a f)) α → (P.last.B a → C) → C) (a : P.A) (f : P.last.B a → P.last.W) (f' : TypeVec.Arrow (P.WPath (WType.mk a f)) α)
Goal: P.wpRec g (WType.mk a f) f' = g a f f' fun i => P.wpRec g (f i) (P.wPathDestRight f' i)
-- MvPFunctor.wp_ind
theorem wp_ind {α : TypeVec n} {C : ∀ x : P.last.W, P.WPath x ⟹ α → Prop}
    (ih : ∀ (a : P.A) (f : P.last.B a → P.last.W) (f' : P.WPath ⟨a, f⟩ ⟹ α),
        (∀ i : P.last.B a, C (f i) (P.wPathDestRight f' i)) → C ⟨a, f⟩ f') :
    ∀ (x : P.last.W) (f' : P.WPath x ⟹ α), C x f'
  
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u_1} n} {C : (x : P.last.W) → TypeVec.Arrow (P.WPath x) α → Prop} (ih :
  ∀ (a : P.A) (f : P.last.B a → P.last.W) (f' : TypeVec.Arrow (P.WPath (WType.mk a f)) α),
    (∀ (i : P.last.B a), C (f i) (P.wPathDestRight f' i)) → C (WType.mk a f) f') (x : P.last.W) (f' : TypeVec.Arrow (P.WPath x) α)
Goal: C x f'
-- MvPFunctor.wRec_eq
theorem wRec_eq {α : TypeVec n} {C : Type*}
    (g : ∀ a : P.A, P.drop.B a ⟹ α → (P.last.B a → P.W α) → (P.last.B a → C) → C) (a : P.A)
    (f' : P.drop.B a ⟹ α) (f : P.last.B a → P.W α) :
    P.wRec g (P.wMk a f' f) = g a f' f fun i => P.wRec g (f i) 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {C : Type u_1} (g : (a : P.A) → (P.drop.B a).Arrow α → (P.last.B a → P.W α) → (P.last.B a → C) → C) (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α)
Goal: P.wRec g (P.wMk a f' f) = g a f' f fun i => P.wRec g (f i)
-- MvPFunctor.w_ind
theorem w_ind {α : TypeVec n} {C : P.W α → Prop}
    (ih : ∀ (a : P.A) (f' : P.drop.B a ⟹ α) (f : P.last.B a → P.W α),
        (∀ i, C (f i)) → C (P.wMk a f' f)) :
    ∀ x, C x 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {C : P.W α → Prop} (ih :
  ∀ (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α), (∀ (i : P.last.B a), C (f i)) → C (P.wMk a f' f)) (x : P.W α)
Goal: C x
-- MvPFunctor.w_cases
theorem w_cases {α : TypeVec n} {C : P.W α → Prop}
    (ih : ∀ (a : P.A) (f' : P.drop.B a ⟹ α) (f : P.last.B a → P.W α), C (P.wMk a f' f)) :
    ∀ x, C x 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} {C : P.W α → Prop} (ih : ∀ (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α), C (P.wMk a f' f)) (x : P.W α)
Goal: C x
-- MvPFunctor.wMk_eq
theorem wMk_eq {α : TypeVec n} (a : P.A) (f : P.last.B a → P.last.W) (g' : P.drop.B a ⟹ α)
    (g : ∀ j : P.last.B a, P.WPath (f j) ⟹ α) :
    (P.wMk a g' fun i => ⟨f i, g i⟩) = ⟨⟨a, f⟩, P.wPathCasesOn g' g⟩ 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} (a : P.A) (f : P.last.B a → P.last.W) (g' : (P.drop.B a).Arrow α) (g : (j : P.last.B a) → TypeVec.Arrow (P.WPath (f j)) α)
Goal: (P.wMk a g' fun i => ⟨f i, g i⟩) = ⟨WType.mk a f, P.wPathCasesOn g' g⟩
-- MvPFunctor.w_map_wMk
theorem w_map_wMk {α β : TypeVec n} (g : α ⟹ β) (a : P.A) (f' : P.drop.B a ⟹ α)
    (f : P.last.B a → P.W α) : g <$$> P.wMk a f' f = P.wMk a (g ⊚ f') fun i => g <$$> f i 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α β : TypeVec.{u} n} (g : α.Arrow β) (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α)
Goal: MvFunctor.map g (P.wMk a f' f) = P.wMk a (TypeVec.comp g f') fun i => MvFunctor.map g (f i)
-- MvPFunctor.map_objAppend1
theorem map_objAppend1 {α γ : TypeVec n} (g : α ⟹ γ) (a : P.A) (f' : P.drop.B a ⟹ α)
    (f : P.last.B a → P.W α) :
    appendFun g (P.wMap g) <$$> P.objAppend1 a f' f =
      P.objAppend1 a (g ⊚ f') fun x => P.wMap g (f x) 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α γ : TypeVec.{u} n} (g : α.Arrow γ) (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α)
Goal: MvFunctor.map (g ::: P.wMap g) (P.objAppend1 a f' f) = P.objAppend1 a (TypeVec.comp g f') fun x => P.wMap g (f x)
-- MvPFunctor.wDest'_wMk
theorem wDest'_wMk {α : TypeVec n} (a : P.A) (f' : P.drop.B a ⟹ α) (f : P.last.B a → P.W α) :
    P.wDest' (P.wMk a f' f) = ⟨a, splitFun f' f⟩ 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} (a : P.A) (f' : (P.drop.B a).Arrow α) (f : P.last.B a → P.W α)
Goal: P.wDest' (P.wMk a f' f) = ⟨a, TypeVec.splitFun f' f⟩
-- MvPFunctor.wDest'_wMk'
theorem wDest'_wMk' {α : TypeVec n} (x : P (α.append1 (P.W α))) : P.wDest' (P.wMk' x) = x 
Arguments: {n : ℕ} (P : MvPFunctor.{u} (n + 1)) {α : TypeVec.{u} n} (x : ↑P (α ::: P.W α))
Goal: P.wDest' (P.wMk' x) = x
-- SetLike.coe_injective'
@[notation_class * carrier Simps.findCoercionArgs]
class SetLike (A : Type*) (B : outParam Type*) where
    protected coe : A → Set B
    protected coe_injective' : Function.Injective coe
Arguments: {A : Type u_1} {B : outParam (Type u_2)} [self : SetLike A B]
Goal: Function.Injective SetLike.coe
-- SetLike.coe_sort_coe
@[simp, norm_cast]
theorem coe_sort_coe : ((p : Set B) : Type _) = p 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] (p : A)
Goal: ↑↑p = ↥p
-- SetLike.exists
protected theorem «exists» {q : p → Prop} : (∃ x, q x) ↔ ∃ (x : B) (h : x ∈ p), q ⟨x, ‹_›⟩ 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p : A} {q : ↥p → Prop}
Goal: (∃ x, q x) ↔ ∃ x, ∃ (h : x ∈ p), q ⟨x, h⟩
-- SetLike.forall
protected theorem «forall» {q : p → Prop} : (∀ x, q x) ↔ ∀ (x : B) (h : x ∈ p), q ⟨x, ‹_›⟩ 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p : A} {q : ↥p → Prop}
Goal: (∀ (x : ↥p), q x) ↔ ∀ (x : B) (h : x ∈ p), q ⟨x, h⟩
-- SetLike.coe_injective
theorem coe_injective : Function.Injective (SetLike.coe : A → Set B) 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B]
Goal: Function.Injective SetLike.coe
-- SetLike.coe_set_eq
@[simp, norm_cast]
theorem coe_set_eq : (p : Set B) = q ↔ p = q 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p q : A}
Goal: ↑p = ↑q ↔ p = q
-- SetLike.coe_ne_coe
@[norm_cast] lemma coe_ne_coe : (p : Set B) ≠ q ↔ p ≠ q 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p q : A}
Goal: ↑p ≠ ↑q ↔ p ≠ q
-- SetLike.ext'
theorem ext' (h : (p : Set B) = q) : p = q 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p q : A} (h : ↑p = ↑q)
Goal: p = q
-- SetLike.ext'_iff
theorem ext'_iff : p = q ↔ (p : Set B) = q 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p q : A}
Goal: p = q ↔ ↑p = ↑q
-- SetLike.ext
theorem ext (h : ∀ x, x ∈ p ↔ x ∈ q) : p = q 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p q : A} (h : ∀ (x : B), x ∈ p ↔ x ∈ q)
Goal: p = q
-- SetLike.ext_iff
theorem ext_iff : p = q ↔ ∀ x, x ∈ p ↔ x ∈ q 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p q : A}
Goal: p = q ↔ ∀ (x : B), x ∈ p ↔ x ∈ q
-- SetLike.mem_coe
@[simp]
theorem mem_coe {x : B} : x ∈ (p : Set B) ↔ x ∈ p 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p : A} {x : B}
Goal: x ∈ ↑p ↔ x ∈ p
-- SetLike.coe_eq_coe
@[simp, norm_cast]
theorem coe_eq_coe {x y : p} : (x : B) = y ↔ x = y 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p : A} {x y : ↥p}
Goal: ↑x = ↑y ↔ x = y
-- SetLike.coe_mem
@[simp]
theorem coe_mem (x : p) : (x : B) ∈ p 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p : A} (x : ↥p)
Goal: ↑x ∈ p
-- SetLike.mem_of_subset
@[aesop 5% apply (rule_sets := [SetLike])]
lemma mem_of_subset {s : Set B} (hp : s ⊆ p) {x : B} (hx : x ∈ s) : x ∈ p 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p : A} {s : Set B} (hp : s ⊆ ↑p) {x : B} (hx : x ∈ s)
Goal: x ∈ p
-- SetLike.eta
protected theorem eta (x : p) (hx : (x : B) ∈ p) : (⟨x, hx⟩ : p) = x 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p : A} (x : ↥p) (hx : ↑x ∈ p)
Goal: ⟨↑x, hx⟩ = x
-- SetLike.le_def
theorem le_def {S T : A} : S ≤ T ↔ ∀ ⦃x : B⦄, x ∈ S → x ∈ T 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {S T : A}
Goal: S ≤ T ↔ ∀ ⦃x : B⦄, x ∈ S → x ∈ T
-- SetLike.coe_subset_coe
@[simp, norm_cast]
theorem coe_subset_coe {S T : A} : (S : Set B) ⊆ T ↔ S ≤ T 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {S T : A}
Goal: ↑S ⊆ ↑T ↔ S ≤ T
-- SetLike.coe_mono
@[mono]
theorem coe_mono : Monotone (SetLike.coe : A → Set B) 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B]
Goal: Monotone SetLike.coe
-- SetLike.coe_ssubset_coe
@[simp, norm_cast]
theorem coe_ssubset_coe {S T : A} : (S : Set B) ⊂ T ↔ S < T 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {S T : A}
Goal: ↑S ⊂ ↑T ↔ S < T
-- SetLike.coe_strictMono
@[mono]
theorem coe_strictMono : StrictMono (SetLike.coe : A → Set B) 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B]
Goal: StrictMono SetLike.coe
-- SetLike.not_le_iff_exists
theorem not_le_iff_exists : ¬p ≤ q ↔ ∃ x ∈ p, x ∉ q 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p q : A}
Goal: ¬p ≤ q ↔ ∃ x ∈ p, x ∉ q
-- SetLike.exists_of_lt
theorem exists_of_lt : p < q → ∃ x ∈ q, x ∉ p 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p q : A}
Goal: p < q → ∃ x ∈ q, x ∉ p
-- SetLike.lt_iff_le_and_exists
theorem lt_iff_le_and_exists : p < q ↔ p ≤ q ∧ ∃ x ∈ q, x ∉ p 
Arguments: {A : Type u_1} {B : Type u_2} [i : SetLike A B] {p q : A}
Goal: p < q ↔ p ≤ q ∧ ∃ x ∈ q, x ∉ p
-- AlgebraicGeometry.Spec.topObj_forget
@[simp] theorem Spec.topObj_forget {R} : (forget TopCat).obj (Spec.topObj R) = PrimeSpectrum R 
Arguments: {R : CommRingCat}
Goal: (CategoryTheory.forget TopCat).obj (AlgebraicGeometry.Spec.topObj R) = PrimeSpectrum ↑R
-- AlgebraicGeometry.Spec.topMap_id
@[simp]
theorem Spec.topMap_id (R : CommRingCat.{u}) : Spec.topMap (𝟙 R) = 𝟙 (Spec.topObj R) 
Arguments: (R : CommRingCat)
Goal: AlgebraicGeometry.Spec.topMap (CategoryTheory.CategoryStruct.id R) =
  CategoryTheory.CategoryStruct.id (AlgebraicGeometry.Spec.topObj R)