9. Non-Integer Powers
An FPS f\in K[[x]] has constant term one if \left[x^0\right]f=1.
We write f\in K[[x]]_1 for this condition.
Lean code for Definition9.1●1 definition
Associated Lean declarations
-
defdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
def AlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] (fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1) : PropThe universe of propositions. `Prop ≡ Sort 0`. Every proposition is propositionally equal to either `True` or `False`.def AlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] (fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1) : PropThe universe of propositions. `Prop ≡ Sort 0`. Every proposition is propositionally equal to either `True` or `False`.An FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.
If f,g\in K[[x]]_1, then fg\in K[[x]]_1.
Lean code for Lemma9.2●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.hasConstantTermOne_mul.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] {fPowerSeries KgPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (hgAlgebraicCombinatorics.FPS.HasConstantTermOne g: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.gPowerSeries K) : AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.(HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.fPowerSeries K*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.gPowerSeries K)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.theorem AlgebraicCombinatorics.FPS.hasConstantTermOne_mul.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] {fPowerSeries KgPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (hgAlgebraicCombinatorics.FPS.HasConstantTermOne g: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.gPowerSeries K) : AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.(HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.fPowerSeries K*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.gPowerSeries K)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.
\left[x^0\right](fg)=\left(\left[x^0\right]f\right)\left(\left[x^0\right]g\right)=1\cdot1=1.
1+x\in K[[x]]_1.
Lean code for Lemma9.3●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.hasConstantTermOne_one_add_X.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] : AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring.)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.theorem AlgebraicCombinatorics.FPS.hasConstantTermOne_one_add_X.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] : AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring.)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.
\left[x^0\right](1+x)=1.
-
AlgebraicCombinatorics.FPS.logSeries[complete]
The logarithm series, or \overline{\log}, is the FPS
\overline{\log} := \sum_{n\geq 1} \frac{(-1)^{n-1}}{n} x^n
= x - \frac{x^2}{2} + \frac{x^3}{3} - \cdots
\in K[[x]].
Its constant term is 0.
Lean code for Definition9.4●1 definition
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.logSeries[complete]
-
AlgebraicCombinatorics.FPS.logSeries[complete]
-
defdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
def AlgebraicCombinatorics.FPS.logSeries.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1def AlgebraicCombinatorics.FPS.logSeries.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1The logarithm series: log(1+x) = x - x²/2 + x³/3 - x⁴/4 + ... This is `\overline{log}` in the source notation. Label: def.fps.logbar
\left[x^0\right]\overline{\log}=0.
Lean code for Lemma9.5●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.constantCoeff_logSeries.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.AlgebraicCombinatorics.FPS.logSeriesAlgebraicCombinatorics.FPS.logSeries.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series: log(1+x) = x - x²/2 + x³/3 - x⁴/4 + ... This is `\overline{log}` in the source notation. Label: def.fps.logbar=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0theorem AlgebraicCombinatorics.FPS.constantCoeff_logSeries.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.AlgebraicCombinatorics.FPS.logSeriesAlgebraicCombinatorics.FPS.logSeries.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] : PowerSeries KThe logarithm series: log(1+x) = x - x²/2 + x³/3 - x⁴/4 + ... This is `\overline{log}` in the source notation. Label: def.fps.logbar=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0The constant term of the log series is 0
Immediate from the definition.
-
AlgebraicCombinatorics.FPS.fpsLog[complete]
For f\in K[[x]]_1, define
\operatorname{Log}(f) := \overline{\log}\circ (f-1).
Since f has constant term 1, the FPS f-1 has constant term 0, so
this substitution is well-defined.
Lean code for Definition9.6●1 definition
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsLog[complete]
-
AlgebraicCombinatorics.FPS.fpsLog[complete]
-
defdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
def AlgebraicCombinatorics.FPS.fpsLog.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] (fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1) : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1def AlgebraicCombinatorics.FPS.fpsLog.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] (fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1) : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1The Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-maps
-
AlgebraicCombinatorics.FPS.fpsLog_one[complete]
\operatorname{Log}(1)=0.
Lean code for Lemma9.7●1 theorem
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsLog_one[complete]
-
AlgebraicCombinatorics.FPS.fpsLog_one[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsLog_one.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] : AlgebraicCombinatorics.FPS.fpsLogAlgebraicCombinatorics.FPS.fpsLog.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) : PowerSeries KThe Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-maps1 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0theorem AlgebraicCombinatorics.FPS.fpsLog_one.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] : AlgebraicCombinatorics.FPS.fpsLogAlgebraicCombinatorics.FPS.fpsLog.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) : PowerSeries KThe Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-maps1 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0Log(1) = 0
\operatorname{Log}(1)=\overline{\log}\circ(1-1)=\overline{\log}\circ 0=0,
since every term in the substitution sum is zero.
For f\in K[[x]]_1, we have
\left[x^0\right]\operatorname{Log}(f)=0.
Lean code for Lemma9.8●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.constantCoeff_fpsLog.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.(AlgebraicCombinatorics.FPS.fpsLogAlgebraicCombinatorics.FPS.fpsLog.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) : PowerSeries KThe Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-mapsfPowerSeries K) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0theorem AlgebraicCombinatorics.FPS.constantCoeff_fpsLog.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.(AlgebraicCombinatorics.FPS.fpsLogAlgebraicCombinatorics.FPS.fpsLog.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) : PowerSeries KThe Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-mapsfPowerSeries K) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0The constant term of Log(f) is 0 when f has constant term 1
The constant term of a substitution g\circ h where both
\left[x^0\right]g=0 and \left[x^0\right]h=0 is again 0.
-
AlgebraicCombinatorics.FPS.fpsLog_mul[complete]
For f,g\in K[[x]]_1,
\operatorname{Log}(fg)=\operatorname{Log}(f)+\operatorname{Log}(g).
Lean code for Theorem9.9●1 theorem
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsLog_mul[complete]
-
AlgebraicCombinatorics.FPS.fpsLog_mul[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsLog_mul.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries KgPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (hgAlgebraicCombinatorics.FPS.HasConstantTermOne g: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.gPowerSeries K) : AlgebraicCombinatorics.FPS.fpsLogAlgebraicCombinatorics.FPS.fpsLog.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) : PowerSeries KThe Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-maps(HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.fPowerSeries K*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.gPowerSeries K)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.AlgebraicCombinatorics.FPS.fpsLogAlgebraicCombinatorics.FPS.fpsLog.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) : PowerSeries KThe Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-mapsfPowerSeries K+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.AlgebraicCombinatorics.FPS.fpsLogAlgebraicCombinatorics.FPS.fpsLog.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) : PowerSeries KThe Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-mapsgPowerSeries Ktheorem AlgebraicCombinatorics.FPS.fpsLog_mul.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries KgPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (hgAlgebraicCombinatorics.FPS.HasConstantTermOne g: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.gPowerSeries K) : AlgebraicCombinatorics.FPS.fpsLogAlgebraicCombinatorics.FPS.fpsLog.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) : PowerSeries KThe Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-maps(HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.fPowerSeries K*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.gPowerSeries K)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.AlgebraicCombinatorics.FPS.fpsLogAlgebraicCombinatorics.FPS.fpsLog.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) : PowerSeries KThe Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-mapsfPowerSeries K+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.AlgebraicCombinatorics.FPS.fpsLogAlgebraicCombinatorics.FPS.fpsLog.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) : PowerSeries KThe Log map: Log(f) = log_series(f-1) = logSeries.subst (f-1) This is well-defined when f has constant term 1. Label: def.fps.Exp-Log-mapsgPowerSeries KThe logarithm product rule: Log(f * g) = Log(f) + Log(g) This is a fundamental property of the logarithm series. For power series f, g with constant term 1: log(f * g) = log(f) + log(g) Label: (log product rule) **Proof strategy** (from the textbook): Use the derivative characterization. Let h = log(fg) - log(f) - log(g). Then h' = (fg)'/(fg) - f'/f - g'/g = (f'g + fg')/(fg) - f'/f - g'/g = 0. Since h(0) = 0 and h' = 0, we have h = 0. **Alternative proof**: Use the inverse property: if Exp and Log are inverses, then Log(fg) = Log(Exp(Log f) * Exp(Log g)) = Log(Exp(Log f + Log g)) = Log f + Log g. **Dependency**: This proof requires either the derivative characterization or the inverse property `Exp_Log_inverse` from ExpLog.lean.
Let
h=\operatorname{Log}(fg)-\operatorname{Log}(f)-\operatorname{Log}(g).
Using the derivative characterization
\left(\dfrac{d}{dx}\right)\operatorname{Log}(f)=\left(\dfrac{d}{dx}\overline{\log}\right)\circ(f-1)\cdot f'
together with the key identity
\left(\dfrac{d}{dx}\overline{\log}\right)\circ(f-1)\cdot f=1, the Leibniz
rule for (fg)' shows that h'=0.
Also
\left[x^0\right]h=0-0-0=0.
By uniqueness from constant term and derivative, h=0, which is exactly the
claim.
-
AlgebraicCombinatorics.FPS.fpsExp[complete]
For g\in K[[x]]_0, define
\operatorname{Exp}(g) := \exp\circ g
= \left(\sum_{n\in\mathbb{N}} \frac{x^n}{n!}\right)\circ g.
Since g has constant term 0, the substitution is well-defined.
Lean code for Definition9.10●1 definition
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsExp[complete]
-
AlgebraicCombinatorics.FPS.fpsExp[complete]
-
defdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
def AlgebraicCombinatorics.FPS.fpsExp.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] (gPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1) : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1def AlgebraicCombinatorics.FPS.fpsExp.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] (gPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1) : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1The Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-maps
-
AlgebraicCombinatorics.FPS.fpsExp_zero[complete]
\operatorname{Exp}(0)=1.
Lean code for Lemma9.11●1 theorem
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsExp_zero[complete]
-
AlgebraicCombinatorics.FPS.fpsExp_zero[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsExp_zero.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] : AlgebraicCombinatorics.FPS.fpsExpAlgebraicCombinatorics.FPS.fpsExp.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (g : PowerSeries K) : PowerSeries KThe Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-maps0 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1theorem AlgebraicCombinatorics.FPS.fpsExp_zero.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] : AlgebraicCombinatorics.FPS.fpsExpAlgebraicCombinatorics.FPS.fpsExp.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (g : PowerSeries K) : PowerSeries KThe Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-maps0 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1Exp(0) = 1
Only the m=0 term in the substitution sum is nonzero, so the value is
1.
For g\in K[[x]]_0, we have
\operatorname{Exp}(g)\in K[[x]]_1.
Lean code for Lemma9.12●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.hasConstantTermOne_fpsExp.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {gPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hgPowerSeries.constantCoeff g = 0: PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.gPowerSeries K=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0) : AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.(AlgebraicCombinatorics.FPS.fpsExpAlgebraicCombinatorics.FPS.fpsExp.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (g : PowerSeries K) : PowerSeries KThe Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-mapsgPowerSeries K)theorem AlgebraicCombinatorics.FPS.hasConstantTermOne_fpsExp.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {gPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hgPowerSeries.constantCoeff g = 0: PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.gPowerSeries K=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0) : AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.(AlgebraicCombinatorics.FPS.fpsExpAlgebraicCombinatorics.FPS.fpsExp.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (g : PowerSeries K) : PowerSeries KThe Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-mapsgPowerSeries K)Exp(g) has constant term 1 when g has constant term 0
The constant term of \operatorname{Exp}(g)=\exp\circ g is
\left[x^0\right]\exp = 1/0! = 1, since all higher powers of g
contribute 0 to the constant term.
-
AlgebraicCombinatorics.FPS.fpsExp_add[complete]
For u,v\in K[[x]]_0, we have
\operatorname{Exp}(u+v)=\operatorname{Exp}(u)\cdot\operatorname{Exp}(v).
Lean code for Theorem9.13●1 theorem
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsExp_add[complete]
-
AlgebraicCombinatorics.FPS.fpsExp_add[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsExp_add.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {xPowerSeries KyPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hxPowerSeries.constantCoeff x = 0: PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.xPowerSeries K=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0) (hyPowerSeries.constantCoeff y = 0: PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.yPowerSeries K=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0) : AlgebraicCombinatorics.FPS.fpsExpAlgebraicCombinatorics.FPS.fpsExp.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (g : PowerSeries K) : PowerSeries KThe Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-maps(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.xPowerSeries K+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.yPowerSeries K)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.AlgebraicCombinatorics.FPS.fpsExpAlgebraicCombinatorics.FPS.fpsExp.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (g : PowerSeries K) : PowerSeries KThe Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-mapsxPowerSeries K*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.AlgebraicCombinatorics.FPS.fpsExpAlgebraicCombinatorics.FPS.fpsExp.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (g : PowerSeries K) : PowerSeries KThe Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-mapsyPowerSeries Ktheorem AlgebraicCombinatorics.FPS.fpsExp_add.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {xPowerSeries KyPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hxPowerSeries.constantCoeff x = 0: PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.xPowerSeries K=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0) (hyPowerSeries.constantCoeff y = 0: PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.yPowerSeries K=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.0) : AlgebraicCombinatorics.FPS.fpsExpAlgebraicCombinatorics.FPS.fpsExp.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (g : PowerSeries K) : PowerSeries KThe Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-maps(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.xPowerSeries K+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.yPowerSeries K)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.AlgebraicCombinatorics.FPS.fpsExpAlgebraicCombinatorics.FPS.fpsExp.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (g : PowerSeries K) : PowerSeries KThe Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-mapsxPowerSeries K*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.AlgebraicCombinatorics.FPS.fpsExpAlgebraicCombinatorics.FPS.fpsExp.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (g : PowerSeries K) : PowerSeries KThe Exp map: Exp(g) = exp(g) = (exp K).subst g This is well-defined when g has constant term 0. Label: def.fps.Exp-Log-mapsyPowerSeries KThe exponential functional equation: Exp(x + y) = Exp(x) * Exp(y) This is a fundamental property of the exponential series. For power series x, y with constant term 0: exp(x + y) = exp(x) * exp(y) Label: (exp functional equation) **Proof strategy** (from the textbook): Both sides satisfy the same differential equation with the same initial condition. Let F(x,y) = exp(x+y) and G(x,y) = exp(x) * exp(y). - ∂F/∂x = exp(x+y) = F and ∂F/∂y = exp(x+y) = F - ∂G/∂x = exp(x) * exp(y) = G and ∂G/∂y = exp(x) * exp(y) = G - F(0,0) = exp(0) = 1 and G(0,0) = exp(0) * exp(0) = 1 By uniqueness of solutions to the ODE, F = G. **Alternative proof** (coefficient comparison): Use the Cauchy product formula and the fact that [x^n](exp(x+y)) = ∑_{k=0}^n [x^k](exp x) * [x^{n-k}](exp y) * C(n,k) which equals [x^n](exp x * exp y) by the binomial theorem. **Mathlib note**: Mathlib's `exp_mul_exp_eq_exp_add` proves this for the special case where x = a • X and y = b • X (i.e., rescaling). The general case requires the derivative characterization or coefficient comparison.
This is the multiplicativity of the exponential map for formal power series.
-
AlgebraicCombinatorics.FPS.fpsPow[complete]
Assume that K is a commutative \mathbb{Q}-algebra.
Let f\in K\left[\left[x\right]\right]_1 and c\in K.
Define an FPS
f^c := \operatorname{Exp}\left(c\operatorname{Log}f\right)
\in K\left[\left[x\right]\right]_1.
Lean code for Definition9.14●1 definition
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsPow[complete]
-
AlgebraicCombinatorics.FPS.fpsPow[complete]
-
defdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
def AlgebraicCombinatorics.FPS.fpsPow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] (fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1) (cK: KType u_1) : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1def AlgebraicCombinatorics.FPS.fpsPow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] (fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1) (cK: KType u_1) : PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1The c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c
-
AlgebraicCombinatorics.FPS.fpsPow_zero[complete]
For any f\in K[[x]], we have f^0 = 1.
Lean code for Lemma9.15●1 theorem
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsPow_zero[complete]
-
AlgebraicCombinatorics.FPS.fpsPow_zero[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsPow_zero.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] (fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K0 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1theorem AlgebraicCombinatorics.FPS.fpsPow_zero.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] (fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K0 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1f^0 = 1 for any f with constant term 1
f^0=\operatorname{Exp}(0\cdot\operatorname{Log}f)=\operatorname{Exp}(0)=1.
For f\in K[[x]]_1 and c\in K, we have
f^c\in K[[x]]_1.
Lean code for Lemma9.16●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.hasConstantTermOne_fpsPow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (cK: KType u_1) : AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.(AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KcK)theorem AlgebraicCombinatorics.FPS.hasConstantTermOne_fpsPow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (cK: KType u_1) : AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.(AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KcK)f^c has constant term 1 when f has constant term 1
Since \left[x^0\right]\operatorname{Log}f = 0, we have
\left[x^0\right](c\operatorname{Log}f)=0, so
\operatorname{Exp}(c\operatorname{Log}f)\in K[[x]]_1.
-
AlgebraicCombinatorics.FPS.fpsPow_one[complete]
For f\in K[[x]]_1, we have f^1 = f.
Lean code for Lemma9.17●1 theorem
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsPow_one[complete]
-
AlgebraicCombinatorics.FPS.fpsPow_one[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsPow_one.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K1 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.fPowerSeries Ktheorem AlgebraicCombinatorics.FPS.fpsPow_one.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K1 =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.fPowerSeries Kf^1 = f for any f with constant term 1. This follows from the Exp-Log inverse property: Exp(Log(f)) = f. Label: (implicit in def.fps.power-c consistency)
f^1=\operatorname{Exp}(1\cdot\operatorname{Log}f)=\operatorname{Exp}(\operatorname{Log}f)=f,
using that \operatorname{Exp}\circ\operatorname{Log} is the identity on
K[[x]]_1.
-
AlgebraicCombinatorics.FPS.fpsPow_add[complete] -
AlgebraicCombinatorics.FPS.fpsPow_mul[complete] -
AlgebraicCombinatorics.FPS.fpsPow_pow[complete]
Assume that K is a commutative \mathbb{Q}-algebra. For any
a,b\in K and
f,g\in K\left[\left[x\right]\right]_1, we have
f^{a+b}=f^a f^b,\qquad (fg)^a=f^a g^a,\qquad \left(f^a\right)^b=f^{ab}.
Lean code for Theorem9.18●3 theorems
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsPow_add[complete]
-
AlgebraicCombinatorics.FPS.fpsPow_mul[complete]
-
AlgebraicCombinatorics.FPS.fpsPow_pow[complete]
-
AlgebraicCombinatorics.FPS.fpsPow_add[complete] -
AlgebraicCombinatorics.FPS.fpsPow_mul[complete] -
AlgebraicCombinatorics.FPS.fpsPow_pow[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsPow_add.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (aKbK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.aK+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.bK)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KaK*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KbKtheorem AlgebraicCombinatorics.FPS.fpsPow_add.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (aKbK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.aK+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.bK)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KaK*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KbKRule of exponents: f^{a+b} = f^a * f^b Label: eq.sec.gf.nips.rules-of-exps (first rule) **Proof**: f^{a+b} = Exp((a+b) • Log f) = Exp(a • Log f + b • Log f) [by smul_add] = Exp(a • Log f) * Exp(b • Log f) [by fpsExp_add] = f^a * f^b **Dependency**: Requires `fpsExp_add`. -
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsPow_mul.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries KgPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (hgAlgebraicCombinatorics.FPS.HasConstantTermOne g: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.gPowerSeries K) (aK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c(HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.fPowerSeries K*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.gPowerSeries K)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.aK=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KaK*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cgPowerSeries KaKtheorem AlgebraicCombinatorics.FPS.fpsPow_mul.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries KgPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (hgAlgebraicCombinatorics.FPS.HasConstantTermOne g: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.gPowerSeries K) (aK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c(HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.fPowerSeries K*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.gPowerSeries K)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.aK=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KaK*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cgPowerSeries KaKRule of exponents: (fg)^a = f^a * g^a Label: eq.sec.gf.nips.rules-of-exps (second rule)
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsPow_pow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (aKbK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c(AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KaK) bK=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K(HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.aK*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.bK)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.theorem AlgebraicCombinatorics.FPS.fpsPow_pow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (aKbK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c(AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KaK) bK=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K(HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.aK*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.bK)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.Rule of exponents: (f^a)^b = f^{ab} Label: eq.sec.gf.nips.rules-of-exps (third rule) **Proof strategy**: (f^a)^b = Exp(b • Log(f^a)) = Exp(b • Log(Exp(a • Log f))) = Exp(b • (a • Log f)) [by fpsLog_fpsExp: Log(Exp g) = g] = Exp((b * a) • Log f) [by smul_smul] = Exp((a * b) • Log f) [by mul_comm] = f^{ab} **Dependency**: Requires the inverse property `fpsLog (fpsExp g) = g` for g with constant term 0. This is proved in ExpLog.lean as `Log_Exp`.
First rule:
f^{a+b}=\operatorname{Exp}((a+b)\operatorname{Log}f)
=\operatorname{Exp}(a\operatorname{Log}f+b\operatorname{Log}f)
=\operatorname{Exp}(a\operatorname{Log}f)\operatorname{Exp}(b\operatorname{Log}f)
=f^a f^b.
Second rule:
(fg)^a=\operatorname{Exp}(a\operatorname{Log}(fg))
=\operatorname{Exp}(a(\operatorname{Log}f+\operatorname{Log}g))
=\operatorname{Exp}(a\operatorname{Log}f+a\operatorname{Log}g)
=f^a g^a.
Third rule:
(f^a)^b=\operatorname{Exp}(b\operatorname{Log}(f^a))
=\operatorname{Exp}(b\operatorname{Log}(\operatorname{Exp}(a\operatorname{Log}f)))
=\operatorname{Exp}(b\cdot a\operatorname{Log}f)
=\operatorname{Exp}((ab)\operatorname{Log}f)=f^{ab}.
For f\in K[[x]]_1 and n\in\mathbb{N}, we have
f^n = \underbrace{f\cdot f\cdots f}_{n\text{ times}}.
That is, the definition of f^c is consistent with the standard power when
c\in\mathbb{N}.
Lean code for Lemma9.19●1 theorem
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsPow_nat[complete]
-
AlgebraicCombinatorics.FPS.fpsPow_nat[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsPow_nat.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] [CharZeroCharZero.{u_1} (R : Type u_1) [AddMonoidWithOne R] : PropTypeclass for monoids with characteristic zero. (This is usually stated on fields but it makes sense for any additive monoid with 1.) *Warning*: for a semiring `R`, `CharZero R` and `CharP R 0` need not coincide. * `CharZero R` requires an injection `ℕ ↪ R`; * `CharP R 0` asks that only `0 : ℕ` maps to `0 : R` under the map `ℕ → R`. For instance, endowing `{0, 1}` with addition given by `max` (i.e. `1` is absorbing), shows that `CharZero {0, 1}` does not hold and yet `CharP {0, 1} 0` does. This example is formalized in `Counterexamples/CharPZeroNeCharZero.lean`.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (nℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K↑nℕ=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.fPowerSeries K^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.nℕtheorem AlgebraicCombinatorics.FPS.fpsPow_nat.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] [CharZeroCharZero.{u_1} (R : Type u_1) [AddMonoidWithOne R] : PropTypeclass for monoids with characteristic zero. (This is usually stated on fields but it makes sense for any additive monoid with 1.) *Warning*: for a semiring `R`, `CharZero R` and `CharP R 0` need not coincide. * `CharZero R` requires an injection `ℕ ↪ R`; * `CharP R 0` asks that only `0 : ℕ` maps to `0 : R` under the map `ℕ → R`. For instance, endowing `{0, 1}` with addition given by `max` (i.e. `1` is absorbing), shows that `CharZero {0, 1}` does not hold and yet `CharP {0, 1} 0` does. This example is formalized in `Counterexamples/CharPZeroNeCharZero.lean`.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (nℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K↑nℕ=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.fPowerSeries K^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.nℕFor natural number exponents, fpsPow agrees with the standard power. This shows our definition is consistent with integer powers. Label: (consistency claim after def.fps.power-c)
Induct on n.
For the base case, f^0=1 by the zero-power lemma.
For the induction step,
f^{n+1}=f^n\cdot f^1=f^n\cdot f by the first exponent rule and the
one-power lemma.
Assume that K is a commutative \mathbb{Q}-algebra. Let c\in K.
Then
\left(1+x\right)^c=\sum_{k\in\mathbb{N}}\dbinom{c}{k}x^k.
Lean code for Theorem9.20●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.generalizedNewtonBinomial.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] [BinomialRingBinomialRing.{u_1} (R : Type u_1) [AddCommMonoid R] [Pow R ℕ] : Type u_1A binomial ring is a ring for which ascending Pochhammer evaluations are uniquely divisible by suitable factorials. We define this notion as a mixin for additive commutative monoids with natural number powers, but retain the ring name. We introduce `Ring.multichoose` as the uniquely defined quotient.KType u_1] [CharZeroCharZero.{u_1} (R : Type u_1) [AddMonoidWithOne R] : PropTypeclass for monoids with characteristic zero. (This is usually stated on fields but it makes sense for any additive monoid with 1.) *Warning*: for a semiring `R`, `CharZero R` and `CharP R 0` need not coincide. * `CharZero R` requires an injection `ℕ ↪ R`; * `CharP R 0` asks that only `0 : ℕ` maps to `0 : R` under the map `ℕ → R`. For instance, endowing `{0, 1}` with addition given by `max` (i.e. `1` is absorbing), shows that `CharZero {0, 1}` does not hold and yet `CharP {0, 1} 0` does. This example is formalized in `Counterexamples/CharPZeroNeCharZero.lean`.KType u_1] (cK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring.)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.cK=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.PowerSeries.binomialSeriesPowerSeries.binomialSeries.{u_1, u_3} {R : Type u_1} [CommRing R] [BinomialRing R] (A : Type u_3) [One A] [SMul R A] (r : R) : PowerSeries AThe power series for `(1 + X) ^ r`.KType u_1cKtheorem AlgebraicCombinatorics.FPS.generalizedNewtonBinomial.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] [BinomialRingBinomialRing.{u_1} (R : Type u_1) [AddCommMonoid R] [Pow R ℕ] : Type u_1A binomial ring is a ring for which ascending Pochhammer evaluations are uniquely divisible by suitable factorials. We define this notion as a mixin for additive commutative monoids with natural number powers, but retain the ring name. We introduce `Ring.multichoose` as the uniquely defined quotient.KType u_1] [CharZeroCharZero.{u_1} (R : Type u_1) [AddMonoidWithOne R] : PropTypeclass for monoids with characteristic zero. (This is usually stated on fields but it makes sense for any additive monoid with 1.) *Warning*: for a semiring `R`, `CharZero R` and `CharP R 0` need not coincide. * `CharZero R` requires an injection `ℕ ↪ R`; * `CharP R 0` asks that only `0 : ℕ` maps to `0 : R` under the map `ℕ → R`. For instance, endowing `{0, 1}` with addition given by `max` (i.e. `1` is absorbing), shows that `CharZero {0, 1}` does not hold and yet `CharP {0, 1} 0` does. This example is formalized in `Counterexamples/CharPZeroNeCharZero.lean`.KType u_1] (cK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring.)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.cK=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.PowerSeries.binomialSeriesPowerSeries.binomialSeries.{u_1, u_3} {R : Type u_1} [CommRing R] [BinomialRing R] (A : Type u_3) [One A] [SMul R A] (r : R) : PowerSeries AThe power series for `(1 + X) ^ r`.KType u_1cKThe generalized Newton binomial formula: (1+x)^c = ∑_{k ∈ ℕ} C(c,k) x^k This extends the standard Newton binomial formula (Theorem thm.fps.newton-binom) from natural number exponents to arbitrary exponents in a ℚ-algebra. The proof uses the polynomial identity trick: both sides of the coefficient equality are polynomials in c that agree on ℕ (by the standard Newton formula), hence they agree everywhere. **Proof outline:** For each coefficient `k`, we need to show `coeff k ((1+X)^c) = Ring.choose c k`. 1. Both sides are polynomial functions of `c` with rational coefficients: - `Ring.choose c k = descPochhammer(c, k) / k!` is a polynomial of degree `k` - `coeff k (fpsExp (c • logSeries))` is also a polynomial in `c` (by expanding the exponential series and collecting terms) 2. For natural `c = n`, both sides equal `Nat.choose n k`: - `Ring.choose n k = Nat.choose n k` by `Ring.choose_natCast` - `coeff k ((1+X)^n) = Nat.choose n k` by the standard binomial theorem 3. By the polynomial identity trick: two polynomials (over ℚ) that agree on all natural numbers must be equal. Hence the coefficients agree for all `c ∈ K`. Label: thm.fps.gen-newton
The definition of \operatorname{Log} gives
\operatorname{Log}(1+x)=\overline{\log}\circ x=\overline{\log}.
Hence
(1+x)^c
=\operatorname{Exp}(c\operatorname{Log}(1+x))
=\operatorname{Exp}(c\,\overline{\log})
=\exp\circ(c\,\overline{\log}).
Expanding this as a power series and collecting coefficients yields an
expression for the coefficient of x^k as a polynomial in c.
The usual binomial coefficient \dbinom{c}{k} is also polynomial in c.
For natural numbers c=n, the equality reduces to the ordinary Newton
binomial formula, so these two polynomials agree on all natural numbers.
By the polynomial identity trick, they are therefore equal for all
c\in K.
For any c\in K and k\in\mathbb{N},
\left[x^k\right](1+x)^c=\dbinom{c}{k}.
Lean code for Corollary9.21●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.coeff_one_add_X_fpsPow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] [BinomialRingBinomialRing.{u_1} (R : Type u_1) [AddCommMonoid R] [Pow R ℕ] : Type u_1A binomial ring is a ring for which ascending Pochhammer evaluations are uniquely divisible by suitable factorials. We define this notion as a mixin for additive commutative monoids with natural number powers, but retain the ring name. We introduce `Ring.multichoose` as the uniquely defined quotient.KType u_1] [CharZeroCharZero.{u_1} (R : Type u_1) [AddMonoidWithOne R] : PropTypeclass for monoids with characteristic zero. (This is usually stated on fields but it makes sense for any additive monoid with 1.) *Warning*: for a semiring `R`, `CharZero R` and `CharP R 0` need not coincide. * `CharZero R` requires an injection `ℕ ↪ R`; * `CharP R 0` asks that only `0 : ℕ` maps to `0 : R` under the map `ℕ → R`. For instance, endowing `{0, 1}` with addition given by `max` (i.e. `1` is absorbing), shows that `CharZero {0, 1}` does not hold and yet `CharP {0, 1} 0` does. This example is formalized in `Counterexamples/CharPZeroNeCharZero.lean`.KType u_1] (cK: KType u_1) (kℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.) : (PowerSeries.coeffPowerSeries.coeff.{u_1} {R : Type u_1} [Semiring R] (n : ℕ) : PowerSeries R →ₗ[R] RThe `n`th coefficient of a formal power series.kℕ) (AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring.)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.cK) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.Ring.chooseRing.choose.{u_1} {R : Type u_1} [AddCommGroupWithOne R] [Pow R ℕ] [BinomialRing R] (r : R) (n : ℕ) : RThe binomial coefficient `choose r n` generalizes the natural number `Nat.choose` function, interpreted in terms of choosing without replacement.cKkℕtheorem AlgebraicCombinatorics.FPS.coeff_one_add_X_fpsPow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] [BinomialRingBinomialRing.{u_1} (R : Type u_1) [AddCommMonoid R] [Pow R ℕ] : Type u_1A binomial ring is a ring for which ascending Pochhammer evaluations are uniquely divisible by suitable factorials. We define this notion as a mixin for additive commutative monoids with natural number powers, but retain the ring name. We introduce `Ring.multichoose` as the uniquely defined quotient.KType u_1] [CharZeroCharZero.{u_1} (R : Type u_1) [AddMonoidWithOne R] : PropTypeclass for monoids with characteristic zero. (This is usually stated on fields but it makes sense for any additive monoid with 1.) *Warning*: for a semiring `R`, `CharZero R` and `CharP R 0` need not coincide. * `CharZero R` requires an injection `ℕ ↪ R`; * `CharP R 0` asks that only `0 : ℕ` maps to `0 : R` under the map `ℕ → R`. For instance, endowing `{0, 1}` with addition given by `max` (i.e. `1` is absorbing), shows that `CharZero {0, 1}` does not hold and yet `CharP {0, 1} 0` does. This example is formalized in `Counterexamples/CharPZeroNeCharZero.lean`.KType u_1] (cK: KType u_1) (kℕ: ℕNat : TypeThe natural numbers, starting at zero. This type is special-cased by both the kernel and the compiler, and overridden with an efficient implementation. Both use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.) : (PowerSeries.coeffPowerSeries.coeff.{u_1} {R : Type u_1} [Semiring R] (n : ℕ) : PowerSeries R →ₗ[R] RThe `n`th coefficient of a formal power series.kℕ) (AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring.)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.cK) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.Ring.chooseRing.choose.{u_1} {R : Type u_1} [AddCommGroupWithOne R] [Pow R ℕ] [BinomialRing R] (r : R) (n : ℕ) : RThe binomial coefficient `choose r n` generalizes the natural number `Nat.choose` function, interpreted in terms of choosing without replacement.cKkℕCorollary: coefficient of x^k in (1+x)^c is C(c,k) Label: thm.fps.gen-newton (coefficient form)
Immediate from the generalized Newton formula by reading off coefficients.
For any n\in K,
(1+x)^{-n}=\sum_{i\in\mathbb{N}}(-1)^i\dbinom{n+i-1}{i}x^i.
Lean code for Theorem9.22●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.antiNewtonBinomial.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] [BinomialRingBinomialRing.{u_1} (R : Type u_1) [AddCommMonoid R] [Pow R ℕ] : Type u_1A binomial ring is a ring for which ascending Pochhammer evaluations are uniquely divisible by suitable factorials. We define this notion as a mixin for additive commutative monoids with natural number powers, but retain the ring name. We introduce `Ring.multichoose` as the uniquely defined quotient.KType u_1] [CharZeroCharZero.{u_1} (R : Type u_1) [AddMonoidWithOne R] : PropTypeclass for monoids with characteristic zero. (This is usually stated on fields but it makes sense for any additive monoid with 1.) *Warning*: for a semiring `R`, `CharZero R` and `CharP R 0` need not coincide. * `CharZero R` requires an injection `ℕ ↪ R`; * `CharP R 0` asks that only `0 : ℕ` maps to `0 : R` under the map `ℕ → R`. For instance, endowing `{0, 1}` with addition given by `max` (i.e. `1` is absorbing), shows that `CharZero {0, 1}` does not hold and yet `CharP {0, 1} 0` does. This example is formalized in `Counterexamples/CharPZeroNeCharZero.lean`.KType u_1] (nK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring.)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.(Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).-Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).nK)Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.PowerSeries.mkPowerSeries.mk.{u_2} {R : Type u_2} (f : ℕ → R) : PowerSeries RConstructor for formal power series.fun iℕ↦ (-1) ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.iℕ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.Ring.chooseRing.choose.{u_1} {R : Type u_1} [AddCommGroupWithOne R] [Pow R ℕ] [BinomialRing R] (r : R) (n : ℕ) : RThe binomial coefficient `choose r n` generalizes the natural number `Nat.choose` function, interpreted in terms of choosing without replacement.(HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).nK+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.↑iℕ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).1)HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).iℕtheorem AlgebraicCombinatorics.FPS.antiNewtonBinomial.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] [BinomialRingBinomialRing.{u_1} (R : Type u_1) [AddCommMonoid R] [Pow R ℕ] : Type u_1A binomial ring is a ring for which ascending Pochhammer evaluations are uniquely divisible by suitable factorials. We define this notion as a mixin for additive commutative monoids with natural number powers, but retain the ring name. We introduce `Ring.multichoose` as the uniquely defined quotient.KType u_1] [CharZeroCharZero.{u_1} (R : Type u_1) [AddMonoidWithOne R] : PropTypeclass for monoids with characteristic zero. (This is usually stated on fields but it makes sense for any additive monoid with 1.) *Warning*: for a semiring `R`, `CharZero R` and `CharP R 0` need not coincide. * `CharZero R` requires an injection `ℕ ↪ R`; * `CharP R 0` asks that only `0 : ℕ` maps to `0 : R` under the map `ℕ → R`. For instance, endowing `{0, 1}` with addition given by `max` (i.e. `1` is absorbing), shows that `CharZero {0, 1}` does not hold and yet `CharP {0, 1} 0` does. This example is formalized in `Counterexamples/CharPZeroNeCharZero.lean`.KType u_1] (nK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c(HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.1 +HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.PowerSeries.XPowerSeries.X.{u_1} {R : Type u_1} [Semiring R] : PowerSeries RThe variable of the formal power series ring.)HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.(Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).-Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).nK)Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.PowerSeries.mkPowerSeries.mk.{u_2} {R : Type u_2} (f : ℕ → R) : PowerSeries RConstructor for formal power series.fun iℕ↦ (-1) ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.iℕ*HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `*` in identifiers is `mul`.Ring.chooseRing.choose.{u_1} {R : Type u_1} [AddCommGroupWithOne R] [Pow R ℕ] [BinomialRing R] (r : R) (n : ℕ) : RThe binomial coefficient `choose r n` generalizes the natural number `Nat.choose` function, interpreted in terms of choosing without replacement.(HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).nK+HAdd.hAdd.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HAdd α β γ] : α → β → γ`a + b` computes the sum of `a` and `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `+` in identifiers is `add`.↑iℕ-HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).1)HSub.hSub.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSub α β γ] : α → β → γ`a - b` computes the difference of `a` and `b`. The meaning of this notation is type-dependent. * For natural numbers, this operator saturates at 0: `a - b = 0` when `a ≤ b`. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `sub` (when used as a binary operator).iℕThe anti-Newton binomial formula: (1+x)^{-n} = ∑_{i ∈ ℕ} (-1)^i C(n+i-1, i) x^i This is a consequence of the generalized Newton formula. Label: prop.fps.anti-newton-binom
Apply the generalized Newton formula with c=-n and use the upper-negation
identity
\dbinom{-n}{i}=(-1)^i\dbinom{n+i-1}{i}.
-
AlgebraicCombinatorics.FPS.one_fpsPow[complete]
For any c\in K, we have 1^c = 1.
Lean code for Lemma9.23●1 theorem
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.one_fpsPow[complete]
-
AlgebraicCombinatorics.FPS.one_fpsPow[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.one_fpsPow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] (cK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c1 cK=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1theorem AlgebraicCombinatorics.FPS.one_fpsPow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] (cK: KType u_1) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-c1 cK=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.11^c = 1 for any c
1^c=\operatorname{Exp}(c\cdot\operatorname{Log}1)
=\operatorname{Exp}(c\cdot 0)=\operatorname{Exp}(0)=1.
For f\in K[[x]]_1 and c\in K, we have
\left[x^0\right](f^c)=1.
Lean code for Lemma9.24●1 theorem
Associated Lean declarations
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.constantCoeff_fpsPow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (cK: KType u_1) : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.(AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KcK) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1theorem AlgebraicCombinatorics.FPS.constantCoeff_fpsPow.{u_1} {K
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.KType u_1] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.KType u_1] {fPowerSeries K: PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`KType u_1} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K) (cK: KType u_1) : PowerSeries.constantCoeffPowerSeries.constantCoeff.{u_1} {R : Type u_1} [Semiring R] : PowerSeries R →+* RThe constant coefficient of a formal power series.(AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries KcK) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.1The constant term of f^c is 1 when f has constant term 1. This is a simp-friendly version of `hasConstantTermOne_fpsPow`. Label: def.fps.power-c (property)
Immediate from the fact that f^c\in K[[x]]_1.
-
AlgebraicCombinatorics.FPS.fpsPow_neg[complete]
For f\in K'[[x]]_1 over a field K' and c\in K', we have
f^{-c} = (f^c)^{-1}.
Lean code for Lemma9.25●1 theorem
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsPow_neg[complete]
-
AlgebraicCombinatorics.FPS.fpsPow_neg[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsPow_neg.{u_2} {K'
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.K'Type u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.K'Type u_2] {fPowerSeries K': PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`K'Type u_2} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K') (cK': K'Type u_2) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K'(Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).-Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).cK')Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.(AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K'cK')⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `⁻¹` in identifiers is `inv`.theorem AlgebraicCombinatorics.FPS.fpsPow_neg.{u_2} {K'
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.K'Type u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.K'Type u_2] {fPowerSeries K': PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`K'Type u_2} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K') (cK': K'Type u_2) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K'(Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).-Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).cK')Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.(AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K'cK')⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `⁻¹` in identifiers is `inv`.f^(-c) = (f^c)⁻¹ for f with constant term 1 (over a field). This extends the rules of exponents to negative powers. Label: def.fps.power-c (negative power property)
We have
f^{-c}\cdot f^c = f^{-c+c} = f^0 = 1, so f^{-c} is the inverse of
f^c.
-
AlgebraicCombinatorics.FPS.fpsPow_int[complete]
For integer exponents, f^c agrees with the standard power:
for n\ge 0, f^n is the usual nonnegative power, and for n<0,
f^n = (f^{|n|})^{-1}.
Lean code for Lemma9.26●1 theorem
Associated Lean declarations
-
AlgebraicCombinatorics.FPS.fpsPow_int[complete]
-
AlgebraicCombinatorics.FPS.fpsPow_int[complete]
-
theoremdefined in AlgebraicCombinatorics/FPS/NonIntegerPowers.leancomplete
theorem AlgebraicCombinatorics.FPS.fpsPow_int.{u_2} {K'
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.K'Type u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.K'Type u_2] {fPowerSeries K': PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`K'Type u_2} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K') (nℤ: ℤInt : TypeThe integers. This type is special-cased by the compiler and overridden with an efficient implementation. The runtime has a special representation for `Int` that stores “small” signed numbers directly, while larger numbers use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)). A “small number” is an integer that can be encoded with one fewer bits than the platform's pointer size (i.e. 63 bits on 64-bit architectures and 31 bits on 32-bit architectures).) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K'↑nℤ=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.ifite.{u} {α : Sort u} (c : Prop) [h : Decidable c] (t e : α) : α`if c then t else e` is notation for `ite c t e`, "if-then-else", which decides to return `t` or `e` depending on whether `c` is true or false. The explicit argument `c : Prop` does not have any actual computational content, but there is an additional `[Decidable c]` argument synthesized by typeclass inference which actually determines how to evaluate `c` to true or false. Write `if h : c then t else e` instead for a "dependent if-then-else" `dite`, which allows `t`/`e` to use the fact that `c` is true/false.nℤ≥GE.ge.{u} {α : Type u} [LE α] (a b : α) : Prop`a ≥ b` is an abbreviation for `b ≤ a`. Conventions for notations in identifiers: * The recommended spelling of `≥` in identifiers is `ge`. * The recommended spelling of `>=` in identifiers is `ge` (prefer `≥` over `>=`).0 thenite.{u} {α : Sort u} (c : Prop) [h : Decidable c] (t e : α) : α`if c then t else e` is notation for `ite c t e`, "if-then-else", which decides to return `t` or `e` depending on whether `c` is true or false. The explicit argument `c : Prop` does not have any actual computational content, but there is an additional `[Decidable c]` argument synthesized by typeclass inference which actually determines how to evaluate `c` to true or false. Write `if h : c then t else e` instead for a "dependent if-then-else" `dite`, which allows `t`/`e` to use the fact that `c` is true/false.fPowerSeries K'^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.nℤ.toNatInt.toNat : ℤ → ℕConverts an integer into a natural number. Negative numbers are converted to `0`. Examples: * `(7 : Int).toNat = 7` * `(0 : Int).toNat = 0` * `(-7 : Int).toNat = 0`elseite.{u} {α : Sort u} (c : Prop) [h : Decidable c] (t e : α) : α`if c then t else e` is notation for `ite c t e`, "if-then-else", which decides to return `t` or `e` depending on whether `c` is true or false. The explicit argument `c : Prop` does not have any actual computational content, but there is an additional `[Decidable c]` argument synthesized by typeclass inference which actually determines how to evaluate `c` to true or false. Write `if h : c then t else e` instead for a "dependent if-then-else" `dite`, which allows `t`/`e` to use the fact that `c` is true/false.(HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.fPowerSeries K'^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.(Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).-Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).nℤ)Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator)..toNatInt.toNat : ℤ → ℕConverts an integer into a natural number. Negative numbers are converted to `0`. Examples: * `(7 : Int).toNat = 7` * `(0 : Int).toNat = 0` * `(-7 : Int).toNat = 0`)HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `⁻¹` in identifiers is `inv`.theorem AlgebraicCombinatorics.FPS.fpsPow_int.{u_2} {K'
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements. An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`. Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself). See also note [forgetful inheritance]. If the field has positive characteristic `p`, our division by zero convention forces `ratCast (1 / p) = 1 / 0 = 0`.K'Type u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`. See the implementation notes in this file for discussion of the details of this definition.ℚRat : TypeRational numbers, implemented as a pair of integers `num / den` such that the denominator is positive and the numerator and denominator are coprime.K'Type u_2] {fPowerSeries K': PowerSeriesPowerSeries.{u_1} (R : Type u_1) : Type u_1Formal power series over a coefficient type `R`K'Type u_2} (hfAlgebraicCombinatorics.FPS.HasConstantTermOne f: AlgebraicCombinatorics.FPS.HasConstantTermOneAlgebraicCombinatorics.FPS.HasConstantTermOne.{u_1} {K : Type u_1} [CommRing K] (f : PowerSeries K) : PropAn FPS has constant term 1. This is the condition for f ∈ K⟦X⟧₁ in the source. Label: def.fps.Exp-Log-maps (b) Note: This is definitionally equivalent to membership in `PowerSeries₁` from ExpLog.lean: `HasConstantTermOne f ↔ f ∈ PowerSeries₁`. The `Prop` form is used here for convenience in hypotheses, while `PowerSeries₁` (a `Set`) is used in ExpLog.lean for subgroup structures.fPowerSeries K') (nℤ: ℤInt : TypeThe integers. This type is special-cased by the compiler and overridden with an efficient implementation. The runtime has a special representation for `Int` that stores “small” signed numbers directly, while larger numbers use a fast arbitrary-precision arithmetic library (usually [GMP](https://gmplib.org/)). A “small number” is an integer that can be encoded with one fewer bits than the platform's pointer size (i.e. 63 bits on 64-bit architectures and 31 bits on 32-bit architectures).) : AlgebraicCombinatorics.FPS.fpsPowAlgebraicCombinatorics.FPS.fpsPow.{u_1} {K : Type u_1} [CommRing K] [Algebra ℚ K] (f : PowerSeries K) (c : K) : PowerSeries KThe c-th power of an FPS f with constant term 1. f^c := Exp(c * Log(f)) = exp.subst (c * log_series.subst (f-1)) Label: def.fps.power-cfPowerSeries K'↑nℤ=Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`. We use `a = b` as notation for `Eq a b`. A fundamental property of equality is that it is an equivalence relation. ``` variable (α : Type) (a b c d : α) variable (hab : a = b) (hcb : c = b) (hcd : c = d) example : a = d := Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd ``` Equality is much more than an equivalence relation, however. It has the important property that every assertion respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value. That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`. Example: ``` example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := Eq.subst h1 h2 example (α : Type) (a b : α) (p : α → Prop) (h1 : a = b) (h2 : p a) : p b := h1 ▸ h2 ``` The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`. For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality) Conventions for notations in identifiers: * The recommended spelling of `=` in identifiers is `eq`.ifite.{u} {α : Sort u} (c : Prop) [h : Decidable c] (t e : α) : α`if c then t else e` is notation for `ite c t e`, "if-then-else", which decides to return `t` or `e` depending on whether `c` is true or false. The explicit argument `c : Prop` does not have any actual computational content, but there is an additional `[Decidable c]` argument synthesized by typeclass inference which actually determines how to evaluate `c` to true or false. Write `if h : c then t else e` instead for a "dependent if-then-else" `dite`, which allows `t`/`e` to use the fact that `c` is true/false.nℤ≥GE.ge.{u} {α : Type u} [LE α] (a b : α) : Prop`a ≥ b` is an abbreviation for `b ≤ a`. Conventions for notations in identifiers: * The recommended spelling of `≥` in identifiers is `ge`. * The recommended spelling of `>=` in identifiers is `ge` (prefer `≥` over `>=`).0 thenite.{u} {α : Sort u} (c : Prop) [h : Decidable c] (t e : α) : α`if c then t else e` is notation for `ite c t e`, "if-then-else", which decides to return `t` or `e` depending on whether `c` is true or false. The explicit argument `c : Prop` does not have any actual computational content, but there is an additional `[Decidable c]` argument synthesized by typeclass inference which actually determines how to evaluate `c` to true or false. Write `if h : c then t else e` instead for a "dependent if-then-else" `dite`, which allows `t`/`e` to use the fact that `c` is true/false.fPowerSeries K'^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.nℤ.toNatInt.toNat : ℤ → ℕConverts an integer into a natural number. Negative numbers are converted to `0`. Examples: * `(7 : Int).toNat = 7` * `(0 : Int).toNat = 0` * `(-7 : Int).toNat = 0`elseite.{u} {α : Sort u} (c : Prop) [h : Decidable c] (t e : α) : α`if c then t else e` is notation for `ite c t e`, "if-then-else", which decides to return `t` or `e` depending on whether `c` is true or false. The explicit argument `c : Prop` does not have any actual computational content, but there is an additional `[Decidable c]` argument synthesized by typeclass inference which actually determines how to evaluate `c` to true or false. Write `if h : c then t else e` instead for a "dependent if-then-else" `dite`, which allows `t`/`e` to use the fact that `c` is true/false.(HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.fPowerSeries K'^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.(Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).-Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator).nℤ)Neg.neg.{u} {α : Type u} [self : Neg α] : α → α`-a` computes the negative or opposite of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `-` in identifiers is `neg` (when used as a unary operator)..toNatInt.toNat : ℤ → ℕConverts an integer into a natural number. Negative numbers are converted to `0`. Examples: * `(7 : Int).toNat = 7` * `(0 : Int).toNat = 0` * `(-7 : Int).toNat = 0`)HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `^` in identifiers is `pow`.⁻¹Inv.inv.{u} {α : Type u} [self : Inv α] : α → α`a⁻¹` computes the inverse of `a`. The meaning of this notation is type-dependent. Conventions for notations in identifiers: * The recommended spelling of `⁻¹` in identifiers is `inv`.For integer exponents, fpsPow agrees with the standard power (when f is invertible). For negative integers, this requires f to be invertible (which holds when constantCoeff f ≠ 0). Label: (consistency claim after def.fps.power-c)
For n\ge 0, use the natural-number compatibility lemma.
For n<0, combine
f^{-c}\cdot f^c=1 with the natural-number case for f^{|n|}.