5. Linear lifting theory and duality
Lemma 5.1 of the paper (Finite-exponent independence).
Suppose \nu and \nu' represent \w modulo the exponent of every finite semidirect and Heisenberg group occurring in a fixed first- or second-order calculation. Replacing every \w-power in the relators by \nu or by \nu' gives the same first derivative and the same mixed second derivative.
Lean code for Lemma5.1●1 theorem
Associated Lean declarations
-
theoremdefined in Q2Presentation/Foundation/Omega2.leancomplete
theorem Q2Presentation.finite_omega2_pow_independent_of_rep.{u_1} {G
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_1] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.GType u_1] (gG: GType u_1) {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.} (hNN ≠ 0: Nℕ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (hdvdorderOf g ∣ N: orderOforderOf.{u_1} {G : Type u_1} [Monoid G] (x : G) : ℕ`orderOf x` is the order of the element `x`, i.e. the `n ≥ 1`, s.t. `x ^ n = 1` if it exists. Otherwise, i.e. if `x` is of infinite order, then `orderOf x` is `0` by convention.gG∣Dvd.dvd.{u_1} {α : Type u_1} [self : Dvd α] : α → α → PropDivisibility. `a ∣ b` (typed as `\|`) means that there is some `c` such that `b = a * c`. Conventions for notations in identifiers: * The recommended spelling of `∣` in identifiers is `dvd`.Nℕ) : gG^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`.(Q2Presentation.omega2ModQ2Presentation.omega2Mod (n : ℕ) : ZMod nThe 2-primary idempotent `ω₂ ∈ Ẑ` reduced modulo `n`: the odd part raised to `φ` of the 2-part. It is `≡ 1` modulo the 2-part `ordProj[2] n = 2 ^ (v₂ n)` and `≡ 0` modulo the odd part `ordCompl[2] n`.Nℕ).valZMod.val {n : ℕ} : ZMod n → ℕ`val a` is a natural number defined as: - for `a : ZMod 0` it is the absolute value of `a` - for `a : ZMod n` with `0 < n` it is the least natural number in the equivalence class See `ZMod.valMinAbs` for a variant that takes values in the integers.=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`.Q2Presentation.powOmega2Q2Presentation.powOmega2.{u_1} {G : Type u_1} [Group G] [Finite G] (g : G) : G`g` raised to the `ω₂`-power in a finite group: reduce `ω₂` modulo `orderOf g` and take the ordinary power. This depends only on `g` (through its order), not on any fixed verification modulus.gGtheorem Q2Presentation.finite_omega2_pow_independent_of_rep.{u_1} {G
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_1] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.GType u_1] (gG: GType u_1) {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.} (hNN ≠ 0: Nℕ≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (hdvdorderOf g ∣ N: orderOforderOf.{u_1} {G : Type u_1} [Monoid G] (x : G) : ℕ`orderOf x` is the order of the element `x`, i.e. the `n ≥ 1`, s.t. `x ^ n = 1` if it exists. Otherwise, i.e. if `x` is of infinite order, then `orderOf x` is `0` by convention.gG∣Dvd.dvd.{u_1} {α : Type u_1} [self : Dvd α] : α → α → PropDivisibility. `a ∣ b` (typed as `\|`) means that there is some `c` such that `b = a * c`. Conventions for notations in identifiers: * The recommended spelling of `∣` in identifiers is `dvd`.Nℕ) : gG^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`.(Q2Presentation.omega2ModQ2Presentation.omega2Mod (n : ℕ) : ZMod nThe 2-primary idempotent `ω₂ ∈ Ẑ` reduced modulo `n`: the odd part raised to `φ` of the 2-part. It is `≡ 1` modulo the 2-part `ordProj[2] n = 2 ^ (v₂ n)` and `≡ 0` modulo the odd part `ordCompl[2] n`.Nℕ).valZMod.val {n : ℕ} : ZMod n → ℕ`val a` is a natural number defined as: - for `a : ZMod 0` it is the absolute value of `a` - for `a : ZMod n` with `0 < n` it is the least natural number in the equivalence class See `ZMod.valMinAbs` for a variant that takes values in the integers.=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`.Q2Presentation.powOmega2Q2Presentation.powOmega2.{u_1} {G : Type u_1} [Group G] [Finite G] (g : G) : G`g` raised to the `ω₂`-power in a finite group: reduce `ω₂` modulo `orderOf g` and take the ordinary power. This depends only on `g` (through its order), not on any fixed verification modulus.gG**Finite-exponent independence** (`lem:finiteexponent`). For any nonzero multiple `N` of `orderOf g`, raising `g` to the residue of `ω₂` modulo `N` gives the intrinsic `ω₂`-power. In particular the fixed verification modulus of the manuscript yields the same element as the genuine profinite exponent.
-
Q2Presentation.Lifting.collector_eq[complete] -
Q2Presentation.Lifting.collector_id_eq_sq[complete]
Lemma 5.2 of the paper (Exact class-two identity).
Let
1\longrightarrow Z\longrightarrow\widetilde V\longrightarrow V\longrightarrow1
be a central extension in which V and Z are elementary abelian 2-groups,
and let \phi be an automorphism of \widetilde V fixing Z. For
X,D\in\widetilde V, put
\mathfrak h_\phi(X,D) =\phi(X)X\,\phi(D)D\,D^2[\phi(D),D].
Then
\mathfrak h_\phi(X,D)=\phi(X)X D^{-1}\phi(D).
Consequently:
-
if
DandXhave the same image inV, then\mathfrak h_\phi(X,D)=X^2; -
if
\phiis the identity, then\mathfrak h_\phi(X,D)=X^2for everyD.
Lean code for Lemma5.2●2 theorems
Associated Lean declarations
-
Q2Presentation.Lifting.collector_eq[complete]
-
Q2Presentation.Lifting.collector_id_eq_sq[complete]
-
Q2Presentation.Lifting.collector_eq[complete] -
Q2Presentation.Lifting.collector_id_eq_sq[complete]
-
theoremdefined in Q2Presentation/Lifting/HeisenbergCup.leancomplete
theorem Q2Presentation.Lifting.collector_eq.{u_2} {G
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_2] (φG →* G: GType u_2→*MonoidHom.{u_10, u_11} (M : Type u_10) (N : Type u_11) [MulOne M] [MulOne N] : Type (max u_10 u_11)`M →* N` is the type of functions `M → N` that preserve the `MulOne` structure. `MonoidHom` is used for both monoid and group homomorphisms. When possible, instead of parametrizing results over `(f : M →* N)`, you should parametrize over `(F : Type*) [MonoidHomClass F M N] (f : F)`. When you extend this structure, make sure to extend `MonoidHomClass`.GType u_2) (XGDG: GType u_2) (hsq∀ (g h : G), g ^ 2 * h = h * g ^ 2: ∀ (gGhG: GType u_2), gG^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`.2 *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`.hG=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`.hG*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`.gG^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`.2) (hk∀ (a b h : G), a⁻¹ * b⁻¹ * a * b * h = h * (a⁻¹ * b⁻¹ * a * b): ∀ (aGbGhG: GType u_2), aG⁻¹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`.*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`.bG⁻¹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`.*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`.aG*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`.bG*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`.hG=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`.hG*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`.(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`.aG⁻¹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`.*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`.bG⁻¹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`.*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`.aG*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`.bG)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`.) (hk2∀ (a b : G), (a⁻¹ * b⁻¹ * a * b) ^ 2 = 1: ∀ (aGbG: GType u_2), (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`.aG⁻¹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`.*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`.bG⁻¹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`.*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`.aG*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`.bG)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`.^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`.2 =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`.1) (h4∀ (g : G), g ^ 4 = 1: ∀ (gG: GType u_2), gG^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`.4 =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`.1) : Q2Presentation.Lifting.collectorQ2Presentation.Lifting.collector.{u_2} {G : Type u_2} [Group G] (φ : G →* G) (X D : G) : GThe **class-two collector word** `𝔥_φ(X,D) = φ(X)·X · φ(D)·D · D²·[φ(D),D]` (manuscript `lem:class2square`, l.1311), with the project commutator convention `[A,B] = A⁻¹B⁻¹AB` (= `Q2Word.commExpr`).φG →* GXGDG=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`.φG →* GXG*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`.XG*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`.DG⁻¹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`.*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`.φG →* GDGtheorem Q2Presentation.Lifting.collector_eq.{u_2} {G
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_2] (φG →* G: GType u_2→*MonoidHom.{u_10, u_11} (M : Type u_10) (N : Type u_11) [MulOne M] [MulOne N] : Type (max u_10 u_11)`M →* N` is the type of functions `M → N` that preserve the `MulOne` structure. `MonoidHom` is used for both monoid and group homomorphisms. When possible, instead of parametrizing results over `(f : M →* N)`, you should parametrize over `(F : Type*) [MonoidHomClass F M N] (f : F)`. When you extend this structure, make sure to extend `MonoidHomClass`.GType u_2) (XGDG: GType u_2) (hsq∀ (g h : G), g ^ 2 * h = h * g ^ 2: ∀ (gGhG: GType u_2), gG^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`.2 *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`.hG=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`.hG*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`.gG^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`.2) (hk∀ (a b h : G), a⁻¹ * b⁻¹ * a * b * h = h * (a⁻¹ * b⁻¹ * a * b): ∀ (aGbGhG: GType u_2), aG⁻¹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`.*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`.bG⁻¹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`.*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`.aG*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`.bG*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`.hG=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`.hG*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`.(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`.aG⁻¹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`.*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`.bG⁻¹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`.*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`.aG*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`.bG)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`.) (hk2∀ (a b : G), (a⁻¹ * b⁻¹ * a * b) ^ 2 = 1: ∀ (aGbG: GType u_2), (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`.aG⁻¹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`.*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`.bG⁻¹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`.*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`.aG*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`.bG)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`.^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`.2 =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`.1) (h4∀ (g : G), g ^ 4 = 1: ∀ (gG: GType u_2), gG^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`.4 =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`.1) : Q2Presentation.Lifting.collectorQ2Presentation.Lifting.collector.{u_2} {G : Type u_2} [Group G] (φ : G →* G) (X D : G) : GThe **class-two collector word** `𝔥_φ(X,D) = φ(X)·X · φ(D)·D · D²·[φ(D),D]` (manuscript `lem:class2square`, l.1311), with the project commutator convention `[A,B] = A⁻¹B⁻¹AB` (= `Q2Word.commExpr`).φG →* GXGDG=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`.φG →* GXG*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`.XG*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`.DG⁻¹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`.*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`.φG →* GDG**The exact class-two identity** (`lem:class2square`, eq:class2collector): in a group where squares (`hsq`) and commutators (`hk`) are central, commutators have order `≤2` (`hk2`), and every element has `4`th power `1` (`h4`), `𝔥_φ(X,D) = φ(X)·X·D⁻¹·φ(D)`.
-
theoremdefined in Q2Presentation/Lifting/HeisenbergCup.leancomplete
theorem Q2Presentation.Lifting.collector_id_eq_sq.{u_2} {G
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_2] (XGDG: GType u_2) (h4∀ (g : G), g ^ 4 = 1: ∀ (gG: GType u_2), gG^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`.4 =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`.1) : Q2Presentation.Lifting.collectorQ2Presentation.Lifting.collector.{u_2} {G : Type u_2} [Group G] (φ : G →* G) (X D : G) : GThe **class-two collector word** `𝔥_φ(X,D) = φ(X)·X · φ(D)·D · D²·[φ(D),D]` (manuscript `lem:class2square`, l.1311), with the project commutator convention `[A,B] = A⁻¹B⁻¹AB` (= `Q2Word.commExpr`).(MonoidHom.idMonoidHom.id.{u_10} (M : Type u_10) [MulOne M] : M →* MThe identity map from a monoid to itself.GType u_2) XGDG=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`.XG^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`.2theorem Q2Presentation.Lifting.collector_id_eq_sq.{u_2} {G
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_2] (XGDG: GType u_2) (h4∀ (g : G), g ^ 4 = 1: ∀ (gG: GType u_2), gG^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`.4 =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`.1) : Q2Presentation.Lifting.collectorQ2Presentation.Lifting.collector.{u_2} {G : Type u_2} [Group G] (φ : G →* G) (X D : G) : GThe **class-two collector word** `𝔥_φ(X,D) = φ(X)·X · φ(D)·D · D²·[φ(D),D]` (manuscript `lem:class2square`, l.1311), with the project commutator convention `[A,B] = A⁻¹B⁻¹AB` (= `Q2Word.commExpr`).(MonoidHom.idMonoidHom.id.{u_10} (M : Type u_10) [MulOne M] : M →* MThe identity map from a monoid to itself.GType u_2) XGDG=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`.XG^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`.2**Consequence (ii)** (`lem:class2square`(ii)): if `φ = 1`, then `𝔥_φ(X,D) = X²` for every `D`. This is the `h₀ ↦ x₀²` replacement of `lem:h0shadow`.
-
Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowManuscriptH0Data[complete] -
Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowProductRuleCoreData[complete] -
Q2Presentation.Lifting.HeisQ.sq_eq[complete] -
Q2Presentation.Lifting.d1_comp_d0_ofRep_tameFactor[complete] -
Q2Presentation.Quadratic.Extraspecial.extraspecialForm_eq_heisSquare[complete]
Lemma 5.3 of the paper (The elementary and class-two shadow of h_0).
Let V be either the trivial module or a nontrivial simple tame
\F_2[C]-module. For an arbitrary lower map, the marked wild subgroup acts
trivially on every simple factor, so the evaluated simple-factor derivatives
are the same as those of the induced tame lower map. At that tame map:
-
the first derivative of
h_0is the first derivative ofx_0^2, namely zero; -
on the normalized degree-one representatives supported on
x_0, the mixed Heisenberg and extraspecial central coordinates ofh_0are respectively those ofx_0^2.
Thus h_0 may replace x_0^2 in every linear, cup-product, and determinant
calculation used below.
Lean code for Lemma5.3●5 theorems
Associated Lean declarations
-
Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowManuscriptH0Data[complete]
-
Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowProductRuleCoreData[complete]
-
Q2Presentation.Lifting.HeisQ.sq_eq[complete]
-
Q2Presentation.Lifting.d1_comp_d0_ofRep_tameFactor[complete]
-
Q2Presentation.Quadratic.Extraspecial.extraspecialForm_eq_heisSquare[complete]
-
Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowManuscriptH0Data[complete] -
Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowProductRuleCoreData[complete] -
Q2Presentation.Lifting.HeisQ.sq_eq[complete] -
Q2Presentation.Lifting.d1_comp_d0_ofRep_tameFactor[complete] -
Q2Presentation.Quadratic.Extraspecial.extraspecialForm_eq_heisSquare[complete]
-
theoremdefined in Q2Presentation/Induction/Section7FrattiniTrivialElementary.leancomplete
theorem Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowManuscriptH0Data {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} {h¬Q2Presentation.Induction.ScalarTerminal p: ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.Q2Presentation.Induction.ScalarTerminalQ2Presentation.Induction.ScalarTerminal (p : Q2Presentation.Induction.FramedPair) : Prop**Scalar-terminal framed pair.**pQ2Presentation.Induction.FramedPair} {chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair} {KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p} {hRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1: Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.kernelFrattiniQ2Presentation.Induction.kernelFrattini {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : Subgroup p.fst.YThe literal Frattini subgroup `R = Φ(K)` of the kernel, as a subgroup of `Y` (the manuscript's `R`, l.3626).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) =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`.1} {childQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData (p : Q2Presentation.Induction.FramedPair) : Type 1The exact-image child packet for the `R = 1` elementary stage. This isolates the manuscript's child geometry (`C = Y/K` and the proper exact-image subtraction children) from the source-specific elementary lift counts.pQ2Presentation.Induction.FramedPair} (srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData {p : Q2Presentation.Induction.FramedPair} (h : ¬Q2Presentation.Induction.ScalarTerminal p) (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1) (child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p) : TypeThe missing **candidate lower source/marking** for the `R = 1` M-stage. This is deliberately smaller and more source-specific than the former operator packet. It records a genuine candidate epimorphism to the lower quotient `C = towerC K`, its four marked values `σ, τ, x₀, x₁`, and the candidate relators seen in that lower quotient. No linear operators or cocycle cardinalities are chosen here.h¬Q2Presentation.Induction.ScalarTerminal pchiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorhRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1childQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p) : NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.(Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowManuscriptH0DataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowManuscriptH0Data {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : TypeThe `h₀` row of the manuscript finite-word ledger (`lem:h0shadow`): the first-order shadow of `h₀` is the shadow of `x₀²`, hence zero in characteristic two.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child)theorem Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowManuscriptH0Data {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} {h¬Q2Presentation.Induction.ScalarTerminal p: ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.Q2Presentation.Induction.ScalarTerminalQ2Presentation.Induction.ScalarTerminal (p : Q2Presentation.Induction.FramedPair) : Prop**Scalar-terminal framed pair.**pQ2Presentation.Induction.FramedPair} {chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair} {KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p} {hRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1: Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.kernelFrattiniQ2Presentation.Induction.kernelFrattini {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : Subgroup p.fst.YThe literal Frattini subgroup `R = Φ(K)` of the kernel, as a subgroup of `Y` (the manuscript's `R`, l.3626).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) =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`.1} {childQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData (p : Q2Presentation.Induction.FramedPair) : Type 1The exact-image child packet for the `R = 1` elementary stage. This isolates the manuscript's child geometry (`C = Y/K` and the proper exact-image subtraction children) from the source-specific elementary lift counts.pQ2Presentation.Induction.FramedPair} (srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData {p : Q2Presentation.Induction.FramedPair} (h : ¬Q2Presentation.Induction.ScalarTerminal p) (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1) (child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p) : TypeThe missing **candidate lower source/marking** for the `R = 1` M-stage. This is deliberately smaller and more source-specific than the former operator packet. It records a genuine candidate epimorphism to the lower quotient `C = towerC K`, its four marked values `σ, τ, x₀, x₁`, and the candidate relators seen in that lower quotient. No linear operators or cocycle cardinalities are chosen here.h¬Q2Presentation.Induction.ScalarTerminal pchiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorhRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1childQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p) : NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.(Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowManuscriptH0DataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowManuscriptH0Data {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : TypeThe `h₀` row of the manuscript finite-word ledger (`lem:h0shadow`): the first-order shadow of `h₀` is the shadow of `x₀²`, hence zero in characteristic two.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child)Former Route249 `h₀` factor row, now theorem-level from the term carrier and the separate `lem:h0shadow` zero shadow.
-
theoremdefined in Q2Presentation/Induction/Section7FrattiniTrivialElementary.leancomplete
theorem Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowProductRuleCoreData {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} {h¬Q2Presentation.Induction.ScalarTerminal p: ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.Q2Presentation.Induction.ScalarTerminalQ2Presentation.Induction.ScalarTerminal (p : Q2Presentation.Induction.FramedPair) : Prop**Scalar-terminal framed pair.**pQ2Presentation.Induction.FramedPair} {chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair} {KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p} {hRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1: Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.kernelFrattiniQ2Presentation.Induction.kernelFrattini {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : Subgroup p.fst.YThe literal Frattini subgroup `R = Φ(K)` of the kernel, as a subgroup of `Y` (the manuscript's `R`, l.3626).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) =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`.1} {childQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData (p : Q2Presentation.Induction.FramedPair) : Type 1The exact-image child packet for the `R = 1` elementary stage. This isolates the manuscript's child geometry (`C = Y/K` and the proper exact-image subtraction children) from the source-specific elementary lift counts.pQ2Presentation.Induction.FramedPair} (srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData {p : Q2Presentation.Induction.FramedPair} (h : ¬Q2Presentation.Induction.ScalarTerminal p) (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1) (child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p) : TypeThe missing **candidate lower source/marking** for the `R = 1` M-stage. This is deliberately smaller and more source-specific than the former operator packet. It records a genuine candidate epimorphism to the lower quotient `C = towerC K`, its four marked values `σ, τ, x₀, x₁`, and the candidate relators seen in that lower quotient. No linear operators or cocycle cardinalities are chosen here.h¬Q2Presentation.Induction.ScalarTerminal pchiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorhRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1childQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p) (h0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorData src: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorData {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : TypeThe `h₀` factor contribution in the candidate wild-row ledger.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) (u1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorData src: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorData {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : TypeThe `u₁⁻¹` factor contribution in the candidate wild-row ledger.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) (x1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorData src: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorData {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : TypeThe `x₁^σ` factor contribution in the candidate wild-row ledger.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) (c0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorData src: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorData {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : TypeThe commutator factor `c₀=[d₀,z₀]` contribution in the candidate wild-row ledger.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.(Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowProductRuleDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowProductRuleData {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) (h0 : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorData src) (u1 : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorData src) (x1 : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorData src) (c0 : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorData src) : PropThe product-rule/Fox fundamental sum for the four actual wild-row factors. This Route241 atom contains only the formal product-rule assembly of the four already separated factor contributions; it does not identify any individual factor.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR childh0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorData srcu1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorData srcx1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorData srcc0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorData src)theorem Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowProductRuleCoreData {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} {h¬Q2Presentation.Induction.ScalarTerminal p: ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.Q2Presentation.Induction.ScalarTerminalQ2Presentation.Induction.ScalarTerminal (p : Q2Presentation.Induction.FramedPair) : Prop**Scalar-terminal framed pair.**pQ2Presentation.Induction.FramedPair} {chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair} {KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p} {hRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1: Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.kernelFrattiniQ2Presentation.Induction.kernelFrattini {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : Subgroup p.fst.YThe literal Frattini subgroup `R = Φ(K)` of the kernel, as a subgroup of `Y` (the manuscript's `R`, l.3626).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) =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`.1} {childQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData (p : Q2Presentation.Induction.FramedPair) : Type 1The exact-image child packet for the `R = 1` elementary stage. This isolates the manuscript's child geometry (`C = Y/K` and the proper exact-image subtraction children) from the source-specific elementary lift counts.pQ2Presentation.Induction.FramedPair} (srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData {p : Q2Presentation.Induction.FramedPair} (h : ¬Q2Presentation.Induction.ScalarTerminal p) (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1) (child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p) : TypeThe missing **candidate lower source/marking** for the `R = 1` M-stage. This is deliberately smaller and more source-specific than the former operator packet. It records a genuine candidate epimorphism to the lower quotient `C = towerC K`, its four marked values `σ, τ, x₀, x₁`, and the candidate relators seen in that lower quotient. No linear operators or cocycle cardinalities are chosen here.h¬Q2Presentation.Induction.ScalarTerminal pchiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorhRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1childQ2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p) (h0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorData src: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorData {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : TypeThe `h₀` factor contribution in the candidate wild-row ledger.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) (u1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorData src: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorData {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : TypeThe `u₁⁻¹` factor contribution in the candidate wild-row ledger.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) (x1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorData src: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorData {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : TypeThe `x₁^σ` factor contribution in the candidate wild-row ledger.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) (c0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorData src: Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorData {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : TypeThe commutator factor `c₀=[d₀,z₀]` contribution in the candidate wild-row ledger.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) : NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.(Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowProductRuleDataQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowProductRuleData {p : Q2Presentation.Induction.FramedPair} {h : ¬Q2Presentation.Induction.ScalarTerminal p} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} {hR : Nat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1} {child : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryChildData p} (src : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR child) (h0 : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorData src) (u1 : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorData src) (x1 : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorData src) (c0 : Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorData src) : PropThe product-rule/Fox fundamental sum for the four actual wild-row factors. This Route241 atom contains only the formal product-rule assembly of the four already separated factor contributions; it does not identify any individual factor.srcQ2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateLowerSourceData h chief K hR childh0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorData srcu1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorData srcx1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorData srcc0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorData src)Former Route245 product-rule/Fox core, now theorem-level from the literal `lem:h0shadow` / `lem:fullwordledger` row. The proof performs no word expansion: it rewrites the four selected factor records by their `shadow` fields and then applies the literal full-word ledger above.
-
theoremdefined in Q2Presentation/Lifting/HeisenbergCup.leancomplete
theorem Q2Presentation.Lifting.HeisQ.sq_eq.{u_1} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] (uQ2Presentation.Lifting.HeisQ A: Q2Presentation.Lifting.HeisQQ2Presentation.Lifting.HeisQ.{u_2} (A : Type u_2) [AddCommGroup A] [Module (ZMod 2) A] : Type u_2The **mixed Heisenberg coefficient group** `H(A) = A × A^∨ × F₂` (manuscript l.1490): primal coordinate `v = D_u`, dual coordinate `dl = D^∨_u`, central coordinate `z = β_u`.AType u_1) : uQ2Presentation.Lifting.HeisQ A^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`.2 =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`.{Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AvAThe primal `A`-coordinate `D_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A0,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AdlQ2Presentation.Lifting.Dual AThe dual `A^∨`-coordinate `D^∨_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A0,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AzZMod 2The central `F₂`-coordinate `β_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AuQ2Presentation.Lifting.HeisQ A.dlQ2Presentation.Lifting.HeisQ.dl.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (self : Q2Presentation.Lifting.HeisQ A) : Q2Presentation.Lifting.Dual AThe dual `A^∨`-coordinate `D^∨_u`.uQ2Presentation.Lifting.HeisQ A.vQ2Presentation.Lifting.HeisQ.v.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (self : Q2Presentation.Lifting.HeisQ A) : AThe primal `A`-coordinate `D_u`.}Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ Atheorem Q2Presentation.Lifting.HeisQ.sq_eq.{u_1} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] (uQ2Presentation.Lifting.HeisQ A: Q2Presentation.Lifting.HeisQQ2Presentation.Lifting.HeisQ.{u_2} (A : Type u_2) [AddCommGroup A] [Module (ZMod 2) A] : Type u_2The **mixed Heisenberg coefficient group** `H(A) = A × A^∨ × F₂` (manuscript l.1490): primal coordinate `v = D_u`, dual coordinate `dl = D^∨_u`, central coordinate `z = β_u`.AType u_1) : uQ2Presentation.Lifting.HeisQ A^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`.2 =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`.{Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AvAThe primal `A`-coordinate `D_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A0,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AdlQ2Presentation.Lifting.Dual AThe dual `A^∨`-coordinate `D^∨_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A0,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AzZMod 2The central `F₂`-coordinate `β_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AuQ2Presentation.Lifting.HeisQ A.dlQ2Presentation.Lifting.HeisQ.dl.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (self : Q2Presentation.Lifting.HeisQ A) : Q2Presentation.Lifting.Dual AThe dual `A^∨`-coordinate `D^∨_u`.uQ2Presentation.Lifting.HeisQ A.vQ2Presentation.Lifting.HeisQ.v.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (self : Q2Presentation.Lifting.HeisQ A) : AThe primal `A`-coordinate `D_u`.}Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AThe **square diagonal** (`lem:h0shadow`(ii)): `u² = (0, 0, λ(v))`. For the normalized representative supported on `x₀` with value `c` and dual `λ`, the central coordinate of `x₀²` (hence of `h₀`, by `lem:h0shadow`) is `λ(c)`.
-
theoremdefined in Q2Presentation/Lifting/WordComplex.leancomplete
theorem Q2Presentation.Lifting.d1_comp_d0_ofRep_tameFactor.{u_1, u_2} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] {CType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.CType u_2] (ρC →* Module.End (ZMod 2) A: CType u_2→*MonoidHom.{u_10, u_11} (M : Type u_10) (N : Type u_11) [MulOne M] [MulOne N] : Type (max u_10 u_11)`M →* N` is the type of functions `M → N` that preserve the `MulOne` structure. `MonoidHom` is used for both monoid and group homomorphisms. When possible, instead of parametrizing results over `(f : M →* N)`, you should parametrize over `(F : Type*) [MonoidHomClass F M N] (f : F)`. When you extend this structure, make sure to extend `MonoidHomClass`.Module.EndModule.End.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vLinear endomorphisms of a module, with associated ring structure `Module.End.semiring` and algebra structure `Module.End.algebra`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1) (sCtCx₀Cx₁C: CType u_2) (hrels⁻¹ * t * s = t ^ 2: sC⁻¹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`.*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`.tC*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`.sC=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`.tC^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`.2) (hx1ρ x₁ = 1: ρC →* Module.End (ZMod 2) Ax₁C=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`.1) : Q2Presentation.Lifting.d1Q2Presentation.Lifting.d1.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] (Sinv T P : Module.End (ZMod 2) A) : A × A × A × A →ₗ[ZMod 2] A × AThe candidate `d¹`, the evaluated Fox Jacobian (manuscript `lem:jacobian`, eq:simplejac): tame row `(S⁻¹(1+T), S⁻¹+1+T, 0, 0)` and wild row `(0, P, 0, P+S⁻¹)`, where `P` is the norm of `⟨T⟩` and `Sinv = S⁻¹`.(ρC →* Module.End (ZMod 2) AsC⁻¹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`.) (ρC →* Module.End (ZMod 2) AtC) (Q2Presentation.Lifting.repNormQ2Presentation.Lifting.repNorm.{u_1, u_2} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] {C : Type u_2} [Group C] (ρ : C →* Module.End (ZMod 2) A) (t : C) : Module.End (ZMod 2) AThe norm element `P = 1 + (ρ t) + ⋯ + (ρ t)^{e-1}` of the cyclic group `⟨ρ t⟩`, `e = orderOf t`.ρC →* Module.End (ZMod 2) AtC) ∘ₗLinearMap.comp.{u_2, u_3, u_4, u_9, u_10, u_11} {R₁ : Type u_2} {R₂ : Type u_3} {R₃ : Type u_4} {M₁ : Type u_9} {M₂ : Type u_10} {M₃ : Type u_11} [Semiring R₁] [Semiring R₂] [Semiring R₃] [AddCommMonoid M₁] [AddCommMonoid M₂] [AddCommMonoid M₃] {module_M₁ : Module R₁ M₁} {module_M₂ : Module R₂ M₂} {module_M₃ : Module R₃ M₃} {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] (f : M₂ →ₛₗ[σ₂₃] M₃) (g : M₁ →ₛₗ[σ₁₂] M₂) : M₁ →ₛₗ[σ₁₃] M₃Composition of two linear maps is a linear mapQ2Presentation.Lifting.d0Q2Presentation.Lifting.d0.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] (S T X₀ X₁ : Module.End (ZMod 2) A) : A →ₗ[ZMod 2] A × A × A × AThe candidate `d⁰` (manuscript eq:d0explicit): `v ↦ ((S-1)v, (T-1)v, (X₀-1)v, (X₁-1)v)`.(ρC →* Module.End (ZMod 2) AsC) (ρC →* Module.End (ZMod 2) AtC) (ρC →* Module.End (ZMod 2) Ax₀C) (ρC →* Module.End (ZMod 2) Ax₁C) =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 Q2Presentation.Lifting.d1_comp_d0_ofRep_tameFactor.{u_1, u_2} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] {CType u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.CType u_2] (ρC →* Module.End (ZMod 2) A: CType u_2→*MonoidHom.{u_10, u_11} (M : Type u_10) (N : Type u_11) [MulOne M] [MulOne N] : Type (max u_10 u_11)`M →* N` is the type of functions `M → N` that preserve the `MulOne` structure. `MonoidHom` is used for both monoid and group homomorphisms. When possible, instead of parametrizing results over `(f : M →* N)`, you should parametrize over `(F : Type*) [MonoidHomClass F M N] (f : F)`. When you extend this structure, make sure to extend `MonoidHomClass`.Module.EndModule.End.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vLinear endomorphisms of a module, with associated ring structure `Module.End.semiring` and algebra structure `Module.End.algebra`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1) (sCtCx₀Cx₁C: CType u_2) (hrels⁻¹ * t * s = t ^ 2: sC⁻¹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`.*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`.tC*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`.sC=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`.tC^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`.2) (hx1ρ x₁ = 1: ρC →* Module.End (ZMod 2) Ax₁C=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`.1) : Q2Presentation.Lifting.d1Q2Presentation.Lifting.d1.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] (Sinv T P : Module.End (ZMod 2) A) : A × A × A × A →ₗ[ZMod 2] A × AThe candidate `d¹`, the evaluated Fox Jacobian (manuscript `lem:jacobian`, eq:simplejac): tame row `(S⁻¹(1+T), S⁻¹+1+T, 0, 0)` and wild row `(0, P, 0, P+S⁻¹)`, where `P` is the norm of `⟨T⟩` and `Sinv = S⁻¹`.(ρC →* Module.End (ZMod 2) AsC⁻¹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`.) (ρC →* Module.End (ZMod 2) AtC) (Q2Presentation.Lifting.repNormQ2Presentation.Lifting.repNorm.{u_1, u_2} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] {C : Type u_2} [Group C] (ρ : C →* Module.End (ZMod 2) A) (t : C) : Module.End (ZMod 2) AThe norm element `P = 1 + (ρ t) + ⋯ + (ρ t)^{e-1}` of the cyclic group `⟨ρ t⟩`, `e = orderOf t`.ρC →* Module.End (ZMod 2) AtC) ∘ₗLinearMap.comp.{u_2, u_3, u_4, u_9, u_10, u_11} {R₁ : Type u_2} {R₂ : Type u_3} {R₃ : Type u_4} {M₁ : Type u_9} {M₂ : Type u_10} {M₃ : Type u_11} [Semiring R₁] [Semiring R₂] [Semiring R₃] [AddCommMonoid M₁] [AddCommMonoid M₂] [AddCommMonoid M₃] {module_M₁ : Module R₁ M₁} {module_M₂ : Module R₂ M₂} {module_M₃ : Module R₃ M₃} {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] (f : M₂ →ₛₗ[σ₂₃] M₃) (g : M₁ →ₛₗ[σ₁₂] M₂) : M₁ →ₛₗ[σ₁₃] M₃Composition of two linear maps is a linear mapQ2Presentation.Lifting.d0Q2Presentation.Lifting.d0.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] (S T X₀ X₁ : Module.End (ZMod 2) A) : A →ₗ[ZMod 2] A × A × A × AThe candidate `d⁰` (manuscript eq:d0explicit): `v ↦ ((S-1)v, (T-1)v, (X₀-1)v, (X₁-1)v)`.(ρC →* Module.End (ZMod 2) AsC) (ρC →* Module.End (ZMod 2) AtC) (ρC →* Module.End (ZMod 2) Ax₀C) (ρC →* Module.End (ZMod 2) Ax₁C) =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`.0On a **simple tame factor** the wild generator acts trivially (`ρ x₁ = 1`), so the wild linear shadow is automatic (`lem:h0shadow`) and the complex property holds from the tame relation alone.
-
theoremdefined in Q2Presentation/Quadratic/GaussSign.leancomplete
theorem Q2Presentation.Quadratic.Extraspecial.extraspecialForm_eq_heisSquare.{u_1} {V
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.VType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType u_1] (φV →ₗ[ZMod 2] Module.Dual (ZMod 2) V: VType u_1→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType u_1) (cV: VType u_1) : (Q2Presentation.Quadratic.Extraspecial.extraspecialFormQ2Presentation.Quadratic.Extraspecial.extraspecialForm.{u_1} {V : Type u_1} [AddCommGroup V] [Module (ZMod 2) V] (φ : V →ₗ[ZMod 2] Module.Dual (ZMod 2) V) : Q2Presentation.Quadratic.QuadF2 V**The extraspecial pushout quadratic obstruction** `κ_q^0` as a `QuadF2`: `form c = φ(c)(c)`, polar form `bcl`. This is the fibre square map of the central double cover (l.2043), *proven quadratic* with the commutator polar form.φV →ₗ[ZMod 2] Module.Dual (ZMod 2) V).formQ2Presentation.Quadratic.QuadF2.form.{u_2} {V : Type u_2} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Quadratic.QuadF2 V) : V → ZMod 2the quadratic map `q : V → F₂`cV=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`.(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`.{Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AvVThe primal `A`-coordinate `D_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AcV,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AdlModule.Dual (ZMod 2) VThe dual `A^∨`-coordinate `D^∨_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AφV →ₗ[ZMod 2] Module.Dual (ZMod 2) VcV,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AzZMod 2The central `F₂`-coordinate `β_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A0 }Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A^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`.2)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`..zQ2Presentation.Lifting.HeisQ.z.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (self : Q2Presentation.Lifting.HeisQ A) : ZMod 2The central `F₂`-coordinate `β_u`.theorem Q2Presentation.Quadratic.Extraspecial.extraspecialForm_eq_heisSquare.{u_1} {V
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.VType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType u_1] (φV →ₗ[ZMod 2] Module.Dual (ZMod 2) V: VType u_1→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType u_1) (cV: VType u_1) : (Q2Presentation.Quadratic.Extraspecial.extraspecialFormQ2Presentation.Quadratic.Extraspecial.extraspecialForm.{u_1} {V : Type u_1} [AddCommGroup V] [Module (ZMod 2) V] (φ : V →ₗ[ZMod 2] Module.Dual (ZMod 2) V) : Q2Presentation.Quadratic.QuadF2 V**The extraspecial pushout quadratic obstruction** `κ_q^0` as a `QuadF2`: `form c = φ(c)(c)`, polar form `bcl`. This is the fibre square map of the central double cover (l.2043), *proven quadratic* with the commutator polar form.φV →ₗ[ZMod 2] Module.Dual (ZMod 2) V).formQ2Presentation.Quadratic.QuadF2.form.{u_2} {V : Type u_2} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Quadratic.QuadF2 V) : V → ZMod 2the quadratic map `q : V → F₂`cV=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`.(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`.{Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AvVThe primal `A`-coordinate `D_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AcV,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AdlModule.Dual (ZMod 2) VThe dual `A^∨`-coordinate `D^∨_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AφV →ₗ[ZMod 2] Module.Dual (ZMod 2) VcV,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AzZMod 2The central `F₂`-coordinate `β_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A0 }Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A^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`.2)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`..zQ2Presentation.Lifting.HeisQ.z.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (self : Q2Presentation.Lifting.HeisQ A) : ZMod 2The central `F₂`-coordinate `β_u`.The extraspecial square map **is** the Heisenberg square diagonal `(u²).z = λ(v)` of `lem:h0shadow` (`HeisQ.sq_z`): `form c = ((⟨c, φc, 0⟩)²).z`.
Proved in §5 of the paper. Ingredients: Lemma 5.2.
-
Q2Presentation.Lifting.d1_trivial[complete]
Lemma 5.5 of the paper (Evaluated Jacobian).
Write the lift variables on (\sigma,\tau,x_0,x_1) as
(a,b,c,d)\in A^4. On a simple tame module the actual relation differential
is
d^1_{\rho,A}= \begin{pmatrix} \mathsf S^{-1}(1+\mathsf T)&\mathsf S^{-1}+1+\mathsf T&0&0\\ 0&P&0&P+\mathsf S^{-1} \end{pmatrix}.
Equivalently,
\begin{aligned}L_{\mathrm t} &=\mathsf S^{-1}(1+\mathsf T)a+(\mathsf S^{-1}+1+\mathsf T)b, \\ L_{\mathrm w} &=Pb+(P+\mathsf S^{-1})d.\end{aligned}
Postcomposing the tame defect coordinate by \mathsf S gives the row-normalized
expression
(1+\mathsf T)a+\bigl(1+\mathsf S(1+\mathsf T)\bigr)b,
which may be used for rank calculations only. The word complex, the mixed derivative, and the endpoint maps below use the unnormalized row (34).
Lean code for Lemma5.4●1 theorem
Associated Lean declarations
-
Q2Presentation.Lifting.d1_trivial[complete]
-
Q2Presentation.Lifting.d1_trivial[complete]
-
theoremdefined in Q2Presentation/Lifting/HeisenbergCup.leancomplete
theorem Q2Presentation.Lifting.d1_trivial (x
ZMod 2 × ZMod 2 × ZMod 2 × ZMod 2: ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) : (Q2Presentation.Lifting.d1Q2Presentation.Lifting.d1.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] (Sinv T P : Module.End (ZMod 2) A) : A × A × A × A →ₗ[ZMod 2] A × AThe candidate `d¹`, the evaluated Fox Jacobian (manuscript `lem:jacobian`, eq:simplejac): tame row `(S⁻¹(1+T), S⁻¹+1+T, 0, 0)` and wild row `(0, P, 0, P+S⁻¹)`, where `P` is the norm of `⟨T⟩` and `Sinv = S⁻¹`.1 1 1) xZMod 2 × ZMod 2 × ZMod 2 × ZMod 2=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`.(Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.xZMod 2 × ZMod 2 × ZMod 2 × ZMod 2.2.1,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.xZMod 2 × ZMod 2 × ZMod 2 × ZMod 2.2.1)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.theorem Q2Presentation.Lifting.d1_trivial (x
ZMod 2 × ZMod 2 × ZMod 2 × ZMod 2: ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) : (Q2Presentation.Lifting.d1Q2Presentation.Lifting.d1.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] (Sinv T P : Module.End (ZMod 2) A) : A × A × A × A →ₗ[ZMod 2] A × AThe candidate `d¹`, the evaluated Fox Jacobian (manuscript `lem:jacobian`, eq:simplejac): tame row `(S⁻¹(1+T), S⁻¹+1+T, 0, 0)` and wild row `(0, P, 0, P+S⁻¹)`, where `P` is the norm of `⟨T⟩` and `Sinv = S⁻¹`.1 1 1) xZMod 2 × ZMod 2 × ZMod 2 × ZMod 2=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`.(Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.xZMod 2 × ZMod 2 × ZMod 2 × ZMod 2.2.1,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.xZMod 2 × ZMod 2 × ZMod 2 × ZMod 2.2.1)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.For the **trivial module** `A = F₂` (`lem:jacobian`/`prop:defduality`, l.1936): all lower actions are trivial (`S=T=1`, `P=1`), and the evaluated Jacobian is `d¹(a,b,c,d) = (b,b)` (only the `τ`-coordinate survives).
Proved in §5 of the paper. Ingredients: Lemma 5.3.
Lemma 5.6 of the paper (Strict coefficient naturality).
For every C-module map f:A\to A', the mixed derivatives satisfy
\beta^{A'}_{\rho,r}(f_*a,\lambda') =\beta^A_{\rho,r}(a,f^\vee\lambda').
Lean code for Lemma5.5●1 theorem
Associated Lean declarations
-
theoremdefined in Q2Presentation/Lifting/HeisenbergNatural.leancomplete
theorem Q2Presentation.Lifting.betaShadow_natural {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] {VTypeV'Type: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.VType] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.V'Type] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V'Type] {ΦQ2Presentation.Lifting.OperatorFamily Yt V: Q2Presentation.Lifting.OperatorFamilyQ2Presentation.Lifting.OperatorFamily (Yt : Q2Presentation.BoundaryFramedTarget) (V : Type) [AddCommGroup V] [Module (ZMod 2) V] : TypeAn operator family with the conjugation antihomomorphism laws.YtQ2Presentation.BoundaryFramedTargetVType} {Φ'Q2Presentation.Lifting.OperatorFamily Yt V': Q2Presentation.Lifting.OperatorFamilyQ2Presentation.Lifting.OperatorFamily (Yt : Q2Presentation.BoundaryFramedTarget) (V : Type) [AddCommGroup V] [Module (ZMod 2) V] : TypeAn operator family with the conjugation antihomomorphism laws.YtQ2Presentation.BoundaryFramedTargetV'Type} {fV →ₗ[ZMod 2] V': VType→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V'Type} (hf∀ (y : Yt.Y) (x : V), f ((Φ.op y) x) = (Φ'.op y) (f x): ∀ (yYt.Y: YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (xV: VType), fV →ₗ[ZMod 2] V'((ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VyYt.Y) xV) =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`.(Φ'Q2Presentation.Lifting.OperatorFamily Yt V'.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VyYt.Y) (fV →ₗ[ZMod 2] V'xV)) (qQ2Presentation.Marking Yt.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (nQ2Presentation.Gen → V: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.→ VType) (φ'Q2Presentation.Gen → Module.Dual (ZMod 2) V': Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.→ Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V'Type) (wQ2Presentation.GExpr: Q2Presentation.GExprQ2Presentation.GExpr : TypeAbstract syntax for words in the generators: the identity, a generator, products, inverses, `ℕ`-powers, and the profinite `ω₂`-power.) : Q2Presentation.Lifting.betaShadowQ2Presentation.Lifting.betaShadow {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) (φ : Q2Presentation.Gen → Module.Dual (ZMod 2) V) (w : Q2Presentation.GExpr) : ZMod 2**The mixed central coordinate** — the cup pairing of the word.Φ'Q2Presentation.Lifting.OperatorFamily Yt V'qQ2Presentation.Marking Yt.Y(fun gQ2Presentation.Gen=> fV →ₗ[ZMod 2] V'(nQ2Presentation.Gen → VgQ2Presentation.Gen)) φ'Q2Presentation.Gen → Module.Dual (ZMod 2) V'wQ2Presentation.GExpr=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`.Q2Presentation.Lifting.betaShadowQ2Presentation.Lifting.betaShadow {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) (φ : Q2Presentation.Gen → Module.Dual (ZMod 2) V) (w : Q2Presentation.GExpr) : ZMod 2**The mixed central coordinate** — the cup pairing of the word.ΦQ2Presentation.Lifting.OperatorFamily Yt VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → V(fun gQ2Presentation.Gen=> φ'Q2Presentation.Gen → Module.Dual (ZMod 2) V'gQ2Presentation.Gen∘ₗLinearMap.comp.{u_2, u_3, u_4, u_9, u_10, u_11} {R₁ : Type u_2} {R₂ : Type u_3} {R₃ : Type u_4} {M₁ : Type u_9} {M₂ : Type u_10} {M₃ : Type u_11} [Semiring R₁] [Semiring R₂] [Semiring R₃] [AddCommMonoid M₁] [AddCommMonoid M₂] [AddCommMonoid M₃] {module_M₁ : Module R₁ M₁} {module_M₂ : Module R₂ M₂} {module_M₃ : Module R₃ M₃} {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] (f : M₂ →ₛₗ[σ₂₃] M₃) (g : M₁ →ₛₗ[σ₁₂] M₂) : M₁ →ₛₗ[σ₁₃] M₃Composition of two linear maps is a linear mapfV →ₗ[ZMod 2] V') wQ2Presentation.GExprtheorem Q2Presentation.Lifting.betaShadow_natural {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] {VTypeV'Type: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.VType] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.V'Type] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V'Type] {ΦQ2Presentation.Lifting.OperatorFamily Yt V: Q2Presentation.Lifting.OperatorFamilyQ2Presentation.Lifting.OperatorFamily (Yt : Q2Presentation.BoundaryFramedTarget) (V : Type) [AddCommGroup V] [Module (ZMod 2) V] : TypeAn operator family with the conjugation antihomomorphism laws.YtQ2Presentation.BoundaryFramedTargetVType} {Φ'Q2Presentation.Lifting.OperatorFamily Yt V': Q2Presentation.Lifting.OperatorFamilyQ2Presentation.Lifting.OperatorFamily (Yt : Q2Presentation.BoundaryFramedTarget) (V : Type) [AddCommGroup V] [Module (ZMod 2) V] : TypeAn operator family with the conjugation antihomomorphism laws.YtQ2Presentation.BoundaryFramedTargetV'Type} {fV →ₗ[ZMod 2] V': VType→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V'Type} (hf∀ (y : Yt.Y) (x : V), f ((Φ.op y) x) = (Φ'.op y) (f x): ∀ (yYt.Y: YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (xV: VType), fV →ₗ[ZMod 2] V'((ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VyYt.Y) xV) =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`.(Φ'Q2Presentation.Lifting.OperatorFamily Yt V'.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VyYt.Y) (fV →ₗ[ZMod 2] V'xV)) (qQ2Presentation.Marking Yt.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (nQ2Presentation.Gen → V: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.→ VType) (φ'Q2Presentation.Gen → Module.Dual (ZMod 2) V': Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.→ Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V'Type) (wQ2Presentation.GExpr: Q2Presentation.GExprQ2Presentation.GExpr : TypeAbstract syntax for words in the generators: the identity, a generator, products, inverses, `ℕ`-powers, and the profinite `ω₂`-power.) : Q2Presentation.Lifting.betaShadowQ2Presentation.Lifting.betaShadow {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) (φ : Q2Presentation.Gen → Module.Dual (ZMod 2) V) (w : Q2Presentation.GExpr) : ZMod 2**The mixed central coordinate** — the cup pairing of the word.Φ'Q2Presentation.Lifting.OperatorFamily Yt V'qQ2Presentation.Marking Yt.Y(fun gQ2Presentation.Gen=> fV →ₗ[ZMod 2] V'(nQ2Presentation.Gen → VgQ2Presentation.Gen)) φ'Q2Presentation.Gen → Module.Dual (ZMod 2) V'wQ2Presentation.GExpr=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`.Q2Presentation.Lifting.betaShadowQ2Presentation.Lifting.betaShadow {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) (φ : Q2Presentation.Gen → Module.Dual (ZMod 2) V) (w : Q2Presentation.GExpr) : ZMod 2**The mixed central coordinate** — the cup pairing of the word.ΦQ2Presentation.Lifting.OperatorFamily Yt VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → V(fun gQ2Presentation.Gen=> φ'Q2Presentation.Gen → Module.Dual (ZMod 2) V'gQ2Presentation.Gen∘ₗLinearMap.comp.{u_2, u_3, u_4, u_9, u_10, u_11} {R₁ : Type u_2} {R₂ : Type u_3} {R₃ : Type u_4} {M₁ : Type u_9} {M₂ : Type u_10} {M₃ : Type u_11} [Semiring R₁] [Semiring R₂] [Semiring R₃] [AddCommMonoid M₁] [AddCommMonoid M₂] [AddCommMonoid M₃] {module_M₁ : Module R₁ M₁} {module_M₂ : Module R₂ M₂} {module_M₃ : Module R₃ M₃} {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] (f : M₂ →ₛₗ[σ₂₃] M₃) (g : M₁ →ₛₗ[σ₁₂] M₂) : M₁ →ₛₗ[σ₁₃] M₃Composition of two linear maps is a linear mapfV →ₗ[ZMod 2] V') wQ2Presentation.GExpr**β-naturality** (`lem:heisnatural`): the cup coordinate transports strictly along intertwiners.
-
Q2Presentation.Lifting.traced_stokes[complete]
Proposition 5.8 of the paper (Traced finite-word Stokes identity).
Let \beta_{\mathrm t} and \beta_{\mathrm w} be the mixed central
coordinates obtained from the tame and wild relators, and set
\mathcal B_{\rho,A}=\beta_{\mathrm t}+\beta_{\mathrm w}.
Let L_{\mathrm t} and L_{\mathrm w} denote the two unnormalized first
relation differentials. Then, before passage to cohomology,
\begin{aligned}\mathcal B_{\rho,A}(d^0_{\rho,A}a,y) &=\langle a, L_{\mathrm t}^{A^\vee}(y)+L_{\mathrm w}^{A^\vee}(y)\rangle, \\ \mathcal B_{\rho,A}(x,d^0_{\rho,A^\vee}\lambda) &=\langle L_{\mathrm t}^{A}(x)+L_{\mathrm w}^{A}(x),\lambda\rangle.\end{aligned}
The identities are natural in A. They are assertions about the sum of the
two relator coordinates; in general they are false for either relator
separately.
Lean code for Theorem5.6●1 theorem
Associated Lean declarations
-
Q2Presentation.Lifting.traced_stokes[complete]
-
Q2Presentation.Lifting.traced_stokes[complete]
-
theoremdefined in Q2Presentation/Lifting/HeisenbergStokes.leancomplete
theorem Q2Presentation.Lifting.traced_stokes {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] {VType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.VType] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType] (ΦQ2Presentation.Lifting.OperatorFamily Yt V: Q2Presentation.Lifting.OperatorFamilyQ2Presentation.Lifting.OperatorFamily (Yt : Q2Presentation.BoundaryFramedTarget) (V : Type) [AddCommGroup V] [Module (ZMod 2) V] : TypeAn operator family with the conjugation antihomomorphism laws.YtQ2Presentation.BoundaryFramedTargetVType) (qQ2Presentation.Marking Yt.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (nQ2Presentation.Gen → V: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.→ VType) (hoddOdd (Q2Presentation.omega2Mod (Nat.card Yt.Y)).val: OddOdd.{u_2} {α : Type u_2} [Semiring α] (a : α) : PropAn element `a` of a semiring is odd if there exists `k` such `a = 2*k + 1`.(Q2Presentation.omega2ModQ2Presentation.omega2Mod (n : ℕ) : ZMod nThe 2-primary idempotent `ω₂ ∈ Ẑ` reduced modulo `n`: the odd part raised to `φ` of the 2-part. It is `≡ 1` modulo the 2-part `ordProj[2] n = 2 ^ (v₂ n)` and `≡ 0` modulo the odd part `ordCompl[2] n`.(Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.)).valZMod.val {n : ℕ} : ZMod n → ℕ`val a` is a natural number defined as: - for `a : ZMod 0` it is the absolute value of `a` - for `a : ZMod n` with `0 < n` it is the least natural number in the equivalence class See `ZMod.valMinAbs` for a variant that takes values in the integers.) (lamModule.Dual (ZMod 2) V: Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType) : Q2Presentation.Lifting.betaShadowQ2Presentation.Lifting.betaShadow {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) (φ : Q2Presentation.Gen → Module.Dual (ZMod 2) V) (w : Q2Presentation.GExpr) : ZMod 2**The mixed central coordinate** — the cup pairing of the word.ΦQ2Presentation.Lifting.OperatorFamily Yt VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → V(fun gQ2Presentation.Gen=> (Q2Presentation.Lifting.dualOpQ2Presentation.Lifting.dualOp {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (y : Yt.Y) : Module.Dual (ZMod 2) V →ₗ[ZMod 2] Module.Dual (ZMod 2) VThe dual operator: precomposition with the inverse operator.ΦQ2Presentation.Lifting.OperatorFamily Yt V(qQ2Presentation.Marking Yt.YgQ2Presentation.Gen)) lamModule.Dual (ZMod 2) V+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`.lamModule.Dual (ZMod 2) V) Q2Presentation.Q2Word.tameRelatorQ2Presentation.Q2Word.tameRelator : Q2Presentation.GExprThe tame relator `τ^σ · (τ²)⁻¹` (the relation `τ^σ = τ²`).+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`.Q2Presentation.Lifting.betaShadowQ2Presentation.Lifting.betaShadow {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) (φ : Q2Presentation.Gen → Module.Dual (ZMod 2) V) (w : Q2Presentation.GExpr) : ZMod 2**The mixed central coordinate** — the cup pairing of the word.ΦQ2Presentation.Lifting.OperatorFamily Yt VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → V(fun gQ2Presentation.Gen=> (Q2Presentation.Lifting.dualOpQ2Presentation.Lifting.dualOp {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (y : Yt.Y) : Module.Dual (ZMod 2) V →ₗ[ZMod 2] Module.Dual (ZMod 2) VThe dual operator: precomposition with the inverse operator.ΦQ2Presentation.Lifting.OperatorFamily Yt V(qQ2Presentation.Marking Yt.YgQ2Presentation.Gen)) lamModule.Dual (ZMod 2) V+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`.lamModule.Dual (ZMod 2) V) Q2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`).=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`.lamModule.Dual (ZMod 2) V((ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(Q2Presentation.Q2Word.tameRelatorQ2Presentation.Q2Word.tameRelator : Q2Presentation.GExprThe tame relator `τ^σ · (τ²)⁻¹` (the relation `τ^σ = τ²`)..evalQ2Presentation.GExpr.eval.{u_1} {G : Type u_1} [Group G] [Finite G] : Q2Presentation.GExpr → Q2Presentation.Marking G → GEvaluate a `GExpr` in a finite group `G` under a marking `q : Gen → G`. The `powOmega2` case is the finite `ω₂`-power `Q2Presentation.powOmega2`.qQ2Presentation.Marking Yt.Y)⁻¹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`.) (Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → VQ2Presentation.Q2Word.tameRelatorQ2Presentation.Q2Word.tameRelator : Q2Presentation.GExprThe tame relator `τ^σ · (τ²)⁻¹` (the relation `τ^σ = τ²`).)) +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`.lamModule.Dual (ZMod 2) V((ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(Q2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`)..evalQ2Presentation.GExpr.eval.{u_1} {G : Type u_1} [Group G] [Finite G] : Q2Presentation.GExpr → Q2Presentation.Marking G → GEvaluate a `GExpr` in a finite group `G` under a marking `q : Gen → G`. The `powOmega2` case is the finite `ω₂`-power `Q2Presentation.powOmega2`.qQ2Presentation.Marking Yt.Y)⁻¹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`.) (Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → VQ2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`).))theorem Q2Presentation.Lifting.traced_stokes {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] {VType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.VType] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType] (ΦQ2Presentation.Lifting.OperatorFamily Yt V: Q2Presentation.Lifting.OperatorFamilyQ2Presentation.Lifting.OperatorFamily (Yt : Q2Presentation.BoundaryFramedTarget) (V : Type) [AddCommGroup V] [Module (ZMod 2) V] : TypeAn operator family with the conjugation antihomomorphism laws.YtQ2Presentation.BoundaryFramedTargetVType) (qQ2Presentation.Marking Yt.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (nQ2Presentation.Gen → V: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.→ VType) (hoddOdd (Q2Presentation.omega2Mod (Nat.card Yt.Y)).val: OddOdd.{u_2} {α : Type u_2} [Semiring α] (a : α) : PropAn element `a` of a semiring is odd if there exists `k` such `a = 2*k + 1`.(Q2Presentation.omega2ModQ2Presentation.omega2Mod (n : ℕ) : ZMod nThe 2-primary idempotent `ω₂ ∈ Ẑ` reduced modulo `n`: the odd part raised to `φ` of the 2-part. It is `≡ 1` modulo the 2-part `ordProj[2] n = 2 ^ (v₂ n)` and `≡ 0` modulo the odd part `ordCompl[2] n`.(Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.)).valZMod.val {n : ℕ} : ZMod n → ℕ`val a` is a natural number defined as: - for `a : ZMod 0` it is the absolute value of `a` - for `a : ZMod n` with `0 < n` it is the least natural number in the equivalence class See `ZMod.valMinAbs` for a variant that takes values in the integers.) (lamModule.Dual (ZMod 2) V: Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType) : Q2Presentation.Lifting.betaShadowQ2Presentation.Lifting.betaShadow {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) (φ : Q2Presentation.Gen → Module.Dual (ZMod 2) V) (w : Q2Presentation.GExpr) : ZMod 2**The mixed central coordinate** — the cup pairing of the word.ΦQ2Presentation.Lifting.OperatorFamily Yt VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → V(fun gQ2Presentation.Gen=> (Q2Presentation.Lifting.dualOpQ2Presentation.Lifting.dualOp {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (y : Yt.Y) : Module.Dual (ZMod 2) V →ₗ[ZMod 2] Module.Dual (ZMod 2) VThe dual operator: precomposition with the inverse operator.ΦQ2Presentation.Lifting.OperatorFamily Yt V(qQ2Presentation.Marking Yt.YgQ2Presentation.Gen)) lamModule.Dual (ZMod 2) V+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`.lamModule.Dual (ZMod 2) V) Q2Presentation.Q2Word.tameRelatorQ2Presentation.Q2Word.tameRelator : Q2Presentation.GExprThe tame relator `τ^σ · (τ²)⁻¹` (the relation `τ^σ = τ²`).+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`.Q2Presentation.Lifting.betaShadowQ2Presentation.Lifting.betaShadow {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) (φ : Q2Presentation.Gen → Module.Dual (ZMod 2) V) (w : Q2Presentation.GExpr) : ZMod 2**The mixed central coordinate** — the cup pairing of the word.ΦQ2Presentation.Lifting.OperatorFamily Yt VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → V(fun gQ2Presentation.Gen=> (Q2Presentation.Lifting.dualOpQ2Presentation.Lifting.dualOp {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) (y : Yt.Y) : Module.Dual (ZMod 2) V →ₗ[ZMod 2] Module.Dual (ZMod 2) VThe dual operator: precomposition with the inverse operator.ΦQ2Presentation.Lifting.OperatorFamily Yt V(qQ2Presentation.Marking Yt.YgQ2Presentation.Gen)) lamModule.Dual (ZMod 2) V+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`.lamModule.Dual (ZMod 2) V) Q2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`).=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`.lamModule.Dual (ZMod 2) V((ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(Q2Presentation.Q2Word.tameRelatorQ2Presentation.Q2Word.tameRelator : Q2Presentation.GExprThe tame relator `τ^σ · (τ²)⁻¹` (the relation `τ^σ = τ²`)..evalQ2Presentation.GExpr.eval.{u_1} {G : Type u_1} [Group G] [Finite G] : Q2Presentation.GExpr → Q2Presentation.Marking G → GEvaluate a `GExpr` in a finite group `G` under a marking `q : Gen → G`. The `powOmega2` case is the finite `ω₂`-power `Q2Presentation.powOmega2`.qQ2Presentation.Marking Yt.Y)⁻¹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`.) (Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → VQ2Presentation.Q2Word.tameRelatorQ2Presentation.Q2Word.tameRelator : Q2Presentation.GExprThe tame relator `τ^σ · (τ²)⁻¹` (the relation `τ^σ = τ²`).)) +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`.lamModule.Dual (ZMod 2) V((ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(Q2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`)..evalQ2Presentation.GExpr.eval.{u_1} {G : Type u_1} [Group G] [Finite G] : Q2Presentation.GExpr → Q2Presentation.Marking G → GEvaluate a `GExpr` in a finite group `G` under a marking `q : Gen → G`. The `powOmega2` case is the finite `ω₂`-power `Q2Presentation.powOmega2`.qQ2Presentation.Marking Yt.Y)⁻¹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`.) (Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → VQ2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`).))**The traced Stokes identity** (`prop:tracedstokes`): at the relator pair the correction terms cancel.
-
Q2Presentation.Induction.levelTrace[complete] -
Q2Presentation.Induction.levelTrace_add[complete] -
Q2Presentation.Lifting.D2_inl[complete] -
Q2Presentation.Lifting.D1trivial[complete]
Proposition 5.10 of the paper (The Fox–Heisenberg chain map).
Under the canonical identifications
\Hom((A^\vee)^2,\F_2)\cong A^2, \qquad \Hom((A^\vee)^4,\F_2)\cong A^4, \qquad \Hom(A^\vee,\F_2)\cong A,
define
\begin{aligned}D^0_{\rho,A}(a)&=(a,a), \\ \langle D^1_{\rho,A}(x),y\rangle&=\mathcal B_{\rho,A}(x,y), \\ D^2_{\rho,A}(u_{\mathrm t},u_{\mathrm w})&=u_{\mathrm t}+u_{\mathrm w}.\end{aligned}
Then D_{\rho,A}=(D^0,D^1,D^2) is a natural chain map
D_{\rho,A}:C_{\rho,A}^\bullet \longrightarrow \Hom_{\F_2}(C_{\rho,A^\vee}^\bullet,\F_2)[-2].
More explicitly,
\begin{aligned}D^1_{\rho,A}d^0_{\rho,A} &=(d^1_{\rho,A^\vee})^\vee D^0_{\rho,A}, \\ D^2_{\rho,A}d^1_{\rho,A} &=(d^0_{\rho,A^\vee})^\vee D^1_{\rho,A}.\end{aligned}
Lean code for Theorem5.7●4 declarations
Associated Lean declarations
-
Q2Presentation.Induction.levelTrace[complete]
-
Q2Presentation.Induction.levelTrace_add[complete]
-
Q2Presentation.Lifting.D2_inl[complete]
-
Q2Presentation.Lifting.D1trivial[complete]
-
Q2Presentation.Induction.levelTrace[complete] -
Q2Presentation.Induction.levelTrace_add[complete] -
Q2Presentation.Lifting.D2_inl[complete] -
Q2Presentation.Lifting.D1trivial[complete]
-
defdefined in Q2Presentation/Induction/CandidateIota.leancomplete
def Q2Presentation.Induction.levelTrace (A
Q2Presentation.AdmissibleIndex: Q2Presentation.AdmissibleIndexQ2Presentation.AdmissibleIndex : TypeA concrete admissible marked finite group with carrier the skeleton `Fin n`. Fixing the carrier to `Fin n` (rather than an arbitrary finite type) keeps the index category used to build `Γ_A` small. The fields are the size `n`, a proof that the carrier is nonempty (`0 < n`), the group structure `groupFin`, the marking `q`, and a proof that `q` is `Admissible` for that structure.) (zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (hz1∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta 1 y = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 21 y(Q2Presentation.Induction.levelBase A).Y=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) (hz2∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta y 1 = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2y(Q2Presentation.Induction.levelBase A).Y1 =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) (hzc∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta a b + zeta (a * b) c = zeta b c + zeta a (b * c): ∀ (a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Y+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`.zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2(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`.a(Q2Presentation.Induction.levelBase A).Y*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`.b(Q2Presentation.Induction.levelBase A).Y)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`.c(Q2Presentation.Induction.levelBase A).Y=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`.zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2b(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y+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`.zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Y(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`.b(Q2Presentation.Induction.levelBase A).Y*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`.c(Q2Presentation.Induction.levelBase A).Y)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`.) : ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2def Q2Presentation.Induction.levelTrace (A
Q2Presentation.AdmissibleIndex: Q2Presentation.AdmissibleIndexQ2Presentation.AdmissibleIndex : TypeA concrete admissible marked finite group with carrier the skeleton `Fin n`. Fixing the carrier to `Fin n` (rather than an arbitrary finite type) keeps the index category used to build `Γ_A` small. The fields are the size `n`, a proof that the carrier is nonempty (`0 < n`), the group structure `groupFin`, the marking `q`, and a proof that `q` is `Admissible` for that structure.) (zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (hz1∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta 1 y = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 21 y(Q2Presentation.Induction.levelBase A).Y=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) (hz2∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta y 1 = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2y(Q2Presentation.Induction.levelBase A).Y1 =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) (hzc∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta a b + zeta (a * b) c = zeta b c + zeta a (b * c): ∀ (a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Y+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`.zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2(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`.a(Q2Presentation.Induction.levelBase A).Y*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`.b(Q2Presentation.Induction.levelBase A).Y)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`.c(Q2Presentation.Induction.levelBase A).Y=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`.zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2b(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y+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`.zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Y(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`.b(Q2Presentation.Induction.levelBase A).Y*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`.c(Q2Presentation.Induction.levelBase A).Y)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`.) : ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2**The candidate level trace** `ι_A(ζ)` (the `prop:chainmap` trace, l.1687): the sum of the scalar reads of the two marked relators, evaluated in the ζ-extension at the canonical marking. `levelTrace_eq_of_base` shows it is marking-independent; `cochainSolvable_iff_levelTrace_eq_zero` shows it is THE solvability functional.
-
theoremdefined in Q2Presentation/Induction/CandidateIota.leancomplete
theorem Q2Presentation.Induction.levelTrace_add (A
Q2Presentation.AdmissibleIndex: Q2Presentation.AdmissibleIndexQ2Presentation.AdmissibleIndex : TypeA concrete admissible marked finite group with carrier the skeleton `Fin n`. Fixing the carrier to `Fin n` (rather than an arbitrary finite type) keeps the index category used to build `Γ_A` small. The fields are the size `n`, a proof that the carrier is nonempty (`0 < n`), the group structure `groupFin`, the marking `q`, and a proof that `q` is `Admissible` for that structure.) (zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (h11∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ 1 y = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 21 y(Q2Presentation.Induction.levelBase A).Y=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) (h12∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ y 1 = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2y(Q2Presentation.Induction.levelBase A).Y1 =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) (h1c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta₁ a b + zeta₁ (a * b) c = zeta₁ b c + zeta₁ a (b * c): ∀ (a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Y+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`.zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2(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`.a(Q2Presentation.Induction.levelBase A).Y*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`.b(Q2Presentation.Induction.levelBase A).Y)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`.c(Q2Presentation.Induction.levelBase A).Y=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`.zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2b(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y+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`.zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Y(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`.b(Q2Presentation.Induction.levelBase A).Y*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`.c(Q2Presentation.Induction.levelBase A).Y)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`.) (zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (h21∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ 1 y = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 21 y(Q2Presentation.Induction.levelBase A).Y=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) (h22∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ y 1 = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2y(Q2Presentation.Induction.levelBase A).Y1 =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) (h2c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta₂ a b + zeta₂ (a * b) c = zeta₂ b c + zeta₂ a (b * c): ∀ (a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2(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`.a(Q2Presentation.Induction.levelBase A).Y*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`.b(Q2Presentation.Induction.levelBase A).Y)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`.c(Q2Presentation.Induction.levelBase A).Y=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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2b(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Y(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`.b(Q2Presentation.Induction.levelBase A).Y*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`.c(Q2Presentation.Induction.levelBase A).Y)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`.) (h121∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) 1 y = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), (fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) 1 y(Q2Presentation.Induction.levelBase A).Y=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) (h122∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) y 1 = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), (fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) y(Q2Presentation.Induction.levelBase A).Y1 =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) (h12c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) a b + (fun u v => zeta₁ u v + zeta₂ u v) (a * b) c = (fun u v => zeta₁ u v + zeta₂ u v) b c + (fun u v => zeta₁ u v + zeta₂ u v) a (b * c): ∀ (a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), (fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Y+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`.(fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) (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`.a(Q2Presentation.Induction.levelBase A).Y*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`.b(Q2Presentation.Induction.levelBase A).Y)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`.c(Q2Presentation.Induction.levelBase A).Y=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`.(fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) b(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y+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`.(fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) a(Q2Presentation.Induction.levelBase A).Y(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`.b(Q2Presentation.Induction.levelBase A).Y*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`.c(Q2Presentation.Induction.levelBase A).Y)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`.) : Q2Presentation.Induction.levelTraceQ2Presentation.Induction.levelTrace (A : Q2Presentation.AdmissibleIndex) (zeta : (Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2) (hz1 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta 1 y = 0) (hz2 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta y 1 = 0) (hzc : ∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta a b + zeta (a * b) c = zeta b c + zeta a (b * c)) : ZMod 2**The candidate level trace** `ι_A(ζ)` (the `prop:chainmap` trace, l.1687): the sum of the scalar reads of the two marked relators, evaluated in the ζ-extension at the canonical marking. `levelTrace_eq_of_base` shows it is marking-independent; `cochainSolvable_iff_levelTrace_eq_zero` shows it is THE solvability functional.AQ2Presentation.AdmissibleIndex(fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) h121∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) 1 y = 0h122∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) y 1 = 0h12c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) a b + (fun u v => zeta₁ u v + zeta₂ u v) (a * b) c = (fun u v => zeta₁ u v + zeta₂ u v) b c + (fun u v => zeta₁ u v + zeta₂ u v) a (b * c)=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`.Q2Presentation.Induction.levelTraceQ2Presentation.Induction.levelTrace (A : Q2Presentation.AdmissibleIndex) (zeta : (Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2) (hz1 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta 1 y = 0) (hz2 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta y 1 = 0) (hzc : ∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta a b + zeta (a * b) c = zeta b c + zeta a (b * c)) : ZMod 2**The candidate level trace** `ι_A(ζ)` (the `prop:chainmap` trace, l.1687): the sum of the scalar reads of the two marked relators, evaluated in the ζ-extension at the canonical marking. `levelTrace_eq_of_base` shows it is marking-independent; `cochainSolvable_iff_levelTrace_eq_zero` shows it is THE solvability functional.AQ2Presentation.AdmissibleIndexzeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2h11∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ 1 y = 0h12∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ y 1 = 0h1c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta₁ a b + zeta₁ (a * b) c = zeta₁ b c + zeta₁ a (b * 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`.Q2Presentation.Induction.levelTraceQ2Presentation.Induction.levelTrace (A : Q2Presentation.AdmissibleIndex) (zeta : (Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2) (hz1 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta 1 y = 0) (hz2 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta y 1 = 0) (hzc : ∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta a b + zeta (a * b) c = zeta b c + zeta a (b * c)) : ZMod 2**The candidate level trace** `ι_A(ζ)` (the `prop:chainmap` trace, l.1687): the sum of the scalar reads of the two marked relators, evaluated in the ζ-extension at the canonical marking. `levelTrace_eq_of_base` shows it is marking-independent; `cochainSolvable_iff_levelTrace_eq_zero` shows it is THE solvability functional.AQ2Presentation.AdmissibleIndexzeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2h21∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ 1 y = 0h22∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ y 1 = 0h2c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta₂ a b + zeta₂ (a * b) c = zeta₂ b c + zeta₂ a (b * c)theorem Q2Presentation.Induction.levelTrace_add (A
Q2Presentation.AdmissibleIndex: Q2Presentation.AdmissibleIndexQ2Presentation.AdmissibleIndex : TypeA concrete admissible marked finite group with carrier the skeleton `Fin n`. Fixing the carrier to `Fin n` (rather than an arbitrary finite type) keeps the index category used to build `Γ_A` small. The fields are the size `n`, a proof that the carrier is nonempty (`0 < n`), the group structure `groupFin`, the marking `q`, and a proof that `q` is `Admissible` for that structure.) (zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (h11∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ 1 y = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 21 y(Q2Presentation.Induction.levelBase A).Y=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) (h12∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ y 1 = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2y(Q2Presentation.Induction.levelBase A).Y1 =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) (h1c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta₁ a b + zeta₁ (a * b) c = zeta₁ b c + zeta₁ a (b * c): ∀ (a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Y+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`.zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2(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`.a(Q2Presentation.Induction.levelBase A).Y*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`.b(Q2Presentation.Induction.levelBase A).Y)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`.c(Q2Presentation.Induction.levelBase A).Y=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`.zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2b(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y+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`.zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Y(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`.b(Q2Presentation.Induction.levelBase A).Y*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`.c(Q2Presentation.Induction.levelBase A).Y)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`.) (zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.→ ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (h21∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ 1 y = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 21 y(Q2Presentation.Induction.levelBase A).Y=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) (h22∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ y 1 = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2y(Q2Presentation.Induction.levelBase A).Y1 =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) (h2c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta₂ a b + zeta₂ (a * b) c = zeta₂ b c + zeta₂ a (b * c): ∀ (a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2(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`.a(Q2Presentation.Induction.levelBase A).Y*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`.b(Q2Presentation.Induction.levelBase A).Y)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`.c(Q2Presentation.Induction.levelBase A).Y=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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2b(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2a(Q2Presentation.Induction.levelBase A).Y(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`.b(Q2Presentation.Induction.levelBase A).Y*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`.c(Q2Presentation.Induction.levelBase A).Y)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`.) (h121∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) 1 y = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), (fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) 1 y(Q2Presentation.Induction.levelBase A).Y=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) (h122∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) y 1 = 0: ∀ (y(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), (fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) y(Q2Presentation.Induction.levelBase A).Y1 =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) (h12c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) a b + (fun u v => zeta₁ u v + zeta₂ u v) (a * b) c = (fun u v => zeta₁ u v + zeta₂ u v) b c + (fun u v => zeta₁ u v + zeta₂ u v) a (b * c): ∀ (a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y: (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTargetAQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), (fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) a(Q2Presentation.Induction.levelBase A).Yb(Q2Presentation.Induction.levelBase A).Y+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`.(fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) (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`.a(Q2Presentation.Induction.levelBase A).Y*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`.b(Q2Presentation.Induction.levelBase A).Y)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`.c(Q2Presentation.Induction.levelBase A).Y=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`.(fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) b(Q2Presentation.Induction.levelBase A).Yc(Q2Presentation.Induction.levelBase A).Y+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`.(fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) a(Q2Presentation.Induction.levelBase A).Y(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`.b(Q2Presentation.Induction.levelBase A).Y*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`.c(Q2Presentation.Induction.levelBase A).Y)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`.) : Q2Presentation.Induction.levelTraceQ2Presentation.Induction.levelTrace (A : Q2Presentation.AdmissibleIndex) (zeta : (Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2) (hz1 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta 1 y = 0) (hz2 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta y 1 = 0) (hzc : ∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta a b + zeta (a * b) c = zeta b c + zeta a (b * c)) : ZMod 2**The candidate level trace** `ι_A(ζ)` (the `prop:chainmap` trace, l.1687): the sum of the scalar reads of the two marked relators, evaluated in the ζ-extension at the canonical marking. `levelTrace_eq_of_base` shows it is marking-independent; `cochainSolvable_iff_levelTrace_eq_zero` shows it is THE solvability functional.AQ2Presentation.AdmissibleIndex(fun u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y=> zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y+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`.zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2u(Q2Presentation.Induction.levelBase A).Yv(Q2Presentation.Induction.levelBase A).Y) h121∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) 1 y = 0h122∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) y 1 = 0h12c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) a b + (fun u v => zeta₁ u v + zeta₂ u v) (a * b) c = (fun u v => zeta₁ u v + zeta₂ u v) b c + (fun u v => zeta₁ u v + zeta₂ u v) a (b * c)=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`.Q2Presentation.Induction.levelTraceQ2Presentation.Induction.levelTrace (A : Q2Presentation.AdmissibleIndex) (zeta : (Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2) (hz1 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta 1 y = 0) (hz2 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta y 1 = 0) (hzc : ∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta a b + zeta (a * b) c = zeta b c + zeta a (b * c)) : ZMod 2**The candidate level trace** `ι_A(ζ)` (the `prop:chainmap` trace, l.1687): the sum of the scalar reads of the two marked relators, evaluated in the ζ-extension at the canonical marking. `levelTrace_eq_of_base` shows it is marking-independent; `cochainSolvable_iff_levelTrace_eq_zero` shows it is THE solvability functional.AQ2Presentation.AdmissibleIndexzeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2h11∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ 1 y = 0h12∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ y 1 = 0h1c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta₁ a b + zeta₁ (a * b) c = zeta₁ b c + zeta₁ a (b * 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`.Q2Presentation.Induction.levelTraceQ2Presentation.Induction.levelTrace (A : Q2Presentation.AdmissibleIndex) (zeta : (Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2) (hz1 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta 1 y = 0) (hz2 : ∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta y 1 = 0) (hzc : ∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta a b + zeta (a * b) c = zeta b c + zeta a (b * c)) : ZMod 2**The candidate level trace** `ι_A(ζ)` (the `prop:chainmap` trace, l.1687): the sum of the scalar reads of the two marked relators, evaluated in the ζ-extension at the canonical marking. `levelTrace_eq_of_base` shows it is marking-independent; `cochainSolvable_iff_levelTrace_eq_zero` shows it is THE solvability functional.AQ2Presentation.AdmissibleIndexzeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2h21∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ 1 y = 0h22∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ y 1 = 0h2c∀ (a b c : (Q2Presentation.Induction.levelBase A).Y), zeta₂ a b + zeta₂ (a * b) c = zeta₂ b c + zeta₂ a (b * c)**K3 — trace additivity in the cocycle** (`prop:chainmap`'s `D²(u_t, u_w) = u_t + u_w` read as linearity of the two relator scalars): the trace of a pointwise sum of level cocycles is the sum of the traces. Proof: evaluate the two relators once in the base-fibre product at the diagonal marking, and push through the three homs (two projections, one scalar-sum) by `GExpr.eval_map`.
-
theoremdefined in Q2Presentation/Lifting/Duality.leancomplete
theorem Q2Presentation.Lifting.D2_inl.{u_1} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] (uA: AType u_1) : Q2Presentation.Lifting.D2Q2Presentation.Lifting.D2.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] : A × A →ₗ[ZMod 2] AThe **degree-two component** of the chain map (`prop:chainmap`, eq:D2): the scalar trace `D²_{ρ,A}(u_t, u_w) = u_t + u_w` on the two relator coordinates.(Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.uA,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.0)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.=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`.uAtheorem Q2Presentation.Lifting.D2_inl.{u_1} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] (uA: AType u_1) : Q2Presentation.Lifting.D2Q2Presentation.Lifting.D2.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] : A × A →ₗ[ZMod 2] AThe **degree-two component** of the chain map (`prop:chainmap`, eq:D2): the scalar trace `D²_{ρ,A}(u_t, u_w) = u_t + u_w` on the two relator coordinates.(Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.uA,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.0)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.=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`.uAThe degree-two trace `D²` is the codiagonal that **splits** the degree-zero diagonal `D⁰` on each relator coordinate (`prop:chainmap`): `D²(u, 0) = u` and `D²(0, u) = u`. `D⁰` (diagonal) and `D²` (codiagonal) are transpose under the identification `Hom((A^∨)ᵏ, F₂) ≅ Aᵏ`, the endpoint duality of `prop:defduality`.
-
defdefined in Q2Presentation/Lifting/Duality.leancomplete
def Q2Presentation.Lifting.D1trivial : Q2Presentation.Lifting.H1trivModel
Q2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) Q2Presentation.Lifting.H1trivModelQ2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.def Q2Presentation.Lifting.D1trivial : Q2Presentation.Lifting.H1trivModel
Q2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) Q2Presentation.Lifting.H1trivModelQ2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.**The degree-one component `D¹` of the chain map for the trivial module** (`prop:chainmap`, eq:D1): `⟨D¹ x, y⟩ = 𝓑_{ρ,A}(x, y)`, and for `A = F₂` the traced Fox–Heisenberg form `𝓑` is the cup form, so `D¹ = cupToDual` (`prop:defduality`, l.1936). Completes the visible triple `D⁰, D¹, D²` of §1.
Proved in §5 of the paper. Ingredients: Theorem 5.6.
Lemma 5.11 of the paper (Exact cone dévissage).
For an elementary \F_2[C]-module A, put
K(A)=\Cone\!\left( D_{\rho,A}:C^\bullet_{\rho,A}\longrightarrow \Hom_{\F_2}(C^\bullet_{\rho,A^\vee},\F_2)[-2] \right).
For every short exact sequence of finite \F_2[C]-modules
0\longrightarrow A'\longrightarrow A\longrightarrow A''\longrightarrow0,
there is a degreewise short exact sequence of complexes
0\longrightarrow K(A')\longrightarrow K(A)\longrightarrow K(A'') \longrightarrow0.
Consequently, if two of K(A'), K(A), and K(A'') are acyclic, then so is
the third. In particular, acyclicity for all simple modules implies
acyclicity for every elementary module, including nonsplit and
nonsemisimple modules.
Lean code for Lemma5.8●1 theorem
Associated Lean declarations
-
theoremdefined in Q2Presentation/Lifting/Duality.leancomplete
theorem Q2Presentation.Lifting.connectingMap_spec.{u_2, u_3, u_4, u_5, u_6, u_7} {T4
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {T2Type u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {M4Type u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {M2Type u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {V4Type u_6: Type u_6A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {V2Type u_7: Type u_7A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.T4Type u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) T4Type u_2] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.T2Type u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) T2Type u_3] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.M4Type u_4] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) M4Type u_4] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.M2Type u_5] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) M2Type u_5] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.V4Type u_6] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V4Type u_6] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.V2Type u_7] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V2Type u_7] (dTT4 →ₗ[ZMod 2] T2: T4Type u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.T2Type u_3) (dMM4 →ₗ[ZMod 2] M2: M4Type u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M2Type u_5) (dVV4 →ₗ[ZMod 2] V2: V4Type u_6→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V2Type u_7) (i4T4 →ₗ[ZMod 2] M4: T4Type u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M4Type u_4) (p4M4 →ₗ[ZMod 2] V4: M4Type u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V4Type u_6) (i2T2 →ₗ[ZMod 2] M2: T2Type u_3→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M2Type u_5) (p2M2 →ₗ[ZMod 2] V2: M2Type u_5→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V2Type u_7) (hi2Function.Injective ⇑i2: Function.InjectiveFunction.Injective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called injective if `f x = f y` implies `x = y`.⇑i2T2 →ₗ[ZMod 2] M2) (hex2p2.ker = i2.range: p2M2 →ₗ[ZMod 2] V2.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.=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`.i2T2 →ₗ[ZMod 2] M2.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern].) (hnatV∀ (m : M4), p2 (dM m) = dV (p4 m): ∀ (mM4: M4Type u_4), p2M2 →ₗ[ZMod 2] V2(dMM4 →ₗ[ZMod 2] M2mM4) =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`.dVV4 →ₗ[ZMod 2] V2(p4M4 →ₗ[ZMod 2] V4mM4)) (hp4Function.Surjective ⇑p4: Function.SurjectiveFunction.Surjective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called surjective if every `b : β` is equal to `f a` for some `a : α`.⇑p4M4 →ₗ[ZMod 2] V4) (hex4p4.ker = i4.range: p4M4 →ₗ[ZMod 2] V4.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.=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`.i4T4 →ₗ[ZMod 2] M4.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern].) (hnatM∀ (w : T4), dM (i4 w) = i2 (dT w): ∀ (wT4: T4Type u_2), dMM4 →ₗ[ZMod 2] M2(i4T4 →ₗ[ZMod 2] M4wT4) =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`.i2T2 →ₗ[ZMod 2] M2(dTT4 →ₗ[ZMod 2] T2wT4)) (c↥dV.ker: ↥dVV4 →ₗ[ZMod 2] V2.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.) (m↥(Q2Presentation.Lifting.obstrCochains dV p4): ↥(Q2Presentation.Lifting.obstrCochainsQ2Presentation.Lifting.obstrCochains.{u_4, u_6, u_7} {M4 : Type u_4} {V4 : Type u_6} {V2 : Type u_7} [AddCommGroup M4] [Module (ZMod 2) M4] [AddCommGroup V4] [Module (ZMod 2) V4] [AddCommGroup V2] [Module (ZMod 2) V2] (dV : V4 →ₗ[ZMod 2] V2) (p4 : M4 →ₗ[ZMod 2] V4) : Submodule (ZMod 2) M4The submodule of degree-one `M`-cochains lying over a `V`-**cocycle**: `m` with `p₄ m ∈ ker d¹_V`. On it, `d¹_M` lands in `range i₂` (the `T`-part), which is what makes the snake map defined.dVV4 →ₗ[ZMod 2] V2p4M4 →ₗ[ZMod 2] V4)) (hmp4 ↑m = ↑c: p4M4 →ₗ[ZMod 2] V4↑m↥(Q2Presentation.Lifting.obstrCochains dV p4)=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`.↑c↥dV.ker) (tT2: T2Type u_3) (hti2 t = dM ↑m: i2T2 →ₗ[ZMod 2] M2tT2=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`.dMM4 →ₗ[ZMod 2] M2↑m↥(Q2Presentation.Lifting.obstrCochains dV p4)) : (Q2Presentation.Lifting.connectingMapQ2Presentation.Lifting.connectingMap.{u_2, u_3, u_4, u_5, u_6, u_7} {T4 : Type u_2} {T2 : Type u_3} {M4 : Type u_4} {M2 : Type u_5} {V4 : Type u_6} {V2 : Type u_7} [AddCommGroup T4] [Module (ZMod 2) T4] [AddCommGroup T2] [Module (ZMod 2) T2] [AddCommGroup M4] [Module (ZMod 2) M4] [AddCommGroup M2] [Module (ZMod 2) M2] [AddCommGroup V4] [Module (ZMod 2) V4] [AddCommGroup V2] [Module (ZMod 2) V2] (dT : T4 →ₗ[ZMod 2] T2) (dM : M4 →ₗ[ZMod 2] M2) (dV : V4 →ₗ[ZMod 2] V2) (i4 : T4 →ₗ[ZMod 2] M4) (p4 : M4 →ₗ[ZMod 2] V4) (i2 : T2 →ₗ[ZMod 2] M2) (p2 : M2 →ₗ[ZMod 2] V2) (hi2 : Function.Injective ⇑i2) (hex2 : p2.ker = i2.range) (hnatV : ∀ (m : M4), p2 (dM m) = dV (p4 m)) (hp4 : Function.Surjective ⇑p4) (hex4 : p4.ker = i4.range) (hnatM : ∀ (w : T4), dM (i4 w) = i2 (dT w)) : ↥dV.ker →ₗ[ZMod 2] T2 ⧸ dT.range**The candidate connecting homomorphism** `∂_{Γ,ρ} : Z¹_{Γ,ρ}(V) → H²_{Γ,ρ}(T)` (`cor:adjointboundary`, l.2005), the snake map of the degreewise-short-exact sequence of word complexes `0 → C(T) → C(M) → C(V) → 0` (`lem:exactcoefffunctor`, eq:coneshortexact). On a `V`-cocycle `c`, lift to `m̃ ∈ M⁴` with `p₄ m̃ = c`; then `d¹_M m̃ = i₂ t` for a unique `t ∈ T²`, and `∂c = [t] ∈ H²(T)`.dTT4 →ₗ[ZMod 2] T2dMM4 →ₗ[ZMod 2] M2dVV4 →ₗ[ZMod 2] V2i4T4 →ₗ[ZMod 2] M4p4M4 →ₗ[ZMod 2] V4i2T2 →ₗ[ZMod 2] M2p2M2 →ₗ[ZMod 2] V2hi2Function.Injective ⇑i2hex2p2.ker = i2.rangehnatV∀ (m : M4), p2 (dM m) = dV (p4 m)hp4Function.Surjective ⇑p4hex4p4.ker = i4.rangehnatM∀ (w : T4), dM (i4 w) = i2 (dT w)) c↥dV.ker=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`.dTT4 →ₗ[ZMod 2] T2.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern]..mkQSubmodule.mkQ.{u_1, u_2} {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) : M →ₗ[R] M ⧸ pThe map from a module `M` to the quotient of `M` by a submodule `p` as a linear map.tT2theorem Q2Presentation.Lifting.connectingMap_spec.{u_2, u_3, u_4, u_5, u_6, u_7} {T4
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {T2Type u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {M4Type u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {M2Type u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {V4Type u_6: Type u_6A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {V2Type u_7: Type u_7A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.T4Type u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) T4Type u_2] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.T2Type u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) T2Type u_3] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.M4Type u_4] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) M4Type u_4] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.M2Type u_5] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) M2Type u_5] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.V4Type u_6] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V4Type u_6] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.V2Type u_7] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V2Type u_7] (dTT4 →ₗ[ZMod 2] T2: T4Type u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.T2Type u_3) (dMM4 →ₗ[ZMod 2] M2: M4Type u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M2Type u_5) (dVV4 →ₗ[ZMod 2] V2: V4Type u_6→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V2Type u_7) (i4T4 →ₗ[ZMod 2] M4: T4Type u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M4Type u_4) (p4M4 →ₗ[ZMod 2] V4: M4Type u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V4Type u_6) (i2T2 →ₗ[ZMod 2] M2: T2Type u_3→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M2Type u_5) (p2M2 →ₗ[ZMod 2] V2: M2Type u_5→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V2Type u_7) (hi2Function.Injective ⇑i2: Function.InjectiveFunction.Injective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called injective if `f x = f y` implies `x = y`.⇑i2T2 →ₗ[ZMod 2] M2) (hex2p2.ker = i2.range: p2M2 →ₗ[ZMod 2] V2.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.=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`.i2T2 →ₗ[ZMod 2] M2.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern].) (hnatV∀ (m : M4), p2 (dM m) = dV (p4 m): ∀ (mM4: M4Type u_4), p2M2 →ₗ[ZMod 2] V2(dMM4 →ₗ[ZMod 2] M2mM4) =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`.dVV4 →ₗ[ZMod 2] V2(p4M4 →ₗ[ZMod 2] V4mM4)) (hp4Function.Surjective ⇑p4: Function.SurjectiveFunction.Surjective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called surjective if every `b : β` is equal to `f a` for some `a : α`.⇑p4M4 →ₗ[ZMod 2] V4) (hex4p4.ker = i4.range: p4M4 →ₗ[ZMod 2] V4.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.=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`.i4T4 →ₗ[ZMod 2] M4.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern].) (hnatM∀ (w : T4), dM (i4 w) = i2 (dT w): ∀ (wT4: T4Type u_2), dMM4 →ₗ[ZMod 2] M2(i4T4 →ₗ[ZMod 2] M4wT4) =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`.i2T2 →ₗ[ZMod 2] M2(dTT4 →ₗ[ZMod 2] T2wT4)) (c↥dV.ker: ↥dVV4 →ₗ[ZMod 2] V2.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.) (m↥(Q2Presentation.Lifting.obstrCochains dV p4): ↥(Q2Presentation.Lifting.obstrCochainsQ2Presentation.Lifting.obstrCochains.{u_4, u_6, u_7} {M4 : Type u_4} {V4 : Type u_6} {V2 : Type u_7} [AddCommGroup M4] [Module (ZMod 2) M4] [AddCommGroup V4] [Module (ZMod 2) V4] [AddCommGroup V2] [Module (ZMod 2) V2] (dV : V4 →ₗ[ZMod 2] V2) (p4 : M4 →ₗ[ZMod 2] V4) : Submodule (ZMod 2) M4The submodule of degree-one `M`-cochains lying over a `V`-**cocycle**: `m` with `p₄ m ∈ ker d¹_V`. On it, `d¹_M` lands in `range i₂` (the `T`-part), which is what makes the snake map defined.dVV4 →ₗ[ZMod 2] V2p4M4 →ₗ[ZMod 2] V4)) (hmp4 ↑m = ↑c: p4M4 →ₗ[ZMod 2] V4↑m↥(Q2Presentation.Lifting.obstrCochains dV p4)=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`.↑c↥dV.ker) (tT2: T2Type u_3) (hti2 t = dM ↑m: i2T2 →ₗ[ZMod 2] M2tT2=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`.dMM4 →ₗ[ZMod 2] M2↑m↥(Q2Presentation.Lifting.obstrCochains dV p4)) : (Q2Presentation.Lifting.connectingMapQ2Presentation.Lifting.connectingMap.{u_2, u_3, u_4, u_5, u_6, u_7} {T4 : Type u_2} {T2 : Type u_3} {M4 : Type u_4} {M2 : Type u_5} {V4 : Type u_6} {V2 : Type u_7} [AddCommGroup T4] [Module (ZMod 2) T4] [AddCommGroup T2] [Module (ZMod 2) T2] [AddCommGroup M4] [Module (ZMod 2) M4] [AddCommGroup M2] [Module (ZMod 2) M2] [AddCommGroup V4] [Module (ZMod 2) V4] [AddCommGroup V2] [Module (ZMod 2) V2] (dT : T4 →ₗ[ZMod 2] T2) (dM : M4 →ₗ[ZMod 2] M2) (dV : V4 →ₗ[ZMod 2] V2) (i4 : T4 →ₗ[ZMod 2] M4) (p4 : M4 →ₗ[ZMod 2] V4) (i2 : T2 →ₗ[ZMod 2] M2) (p2 : M2 →ₗ[ZMod 2] V2) (hi2 : Function.Injective ⇑i2) (hex2 : p2.ker = i2.range) (hnatV : ∀ (m : M4), p2 (dM m) = dV (p4 m)) (hp4 : Function.Surjective ⇑p4) (hex4 : p4.ker = i4.range) (hnatM : ∀ (w : T4), dM (i4 w) = i2 (dT w)) : ↥dV.ker →ₗ[ZMod 2] T2 ⧸ dT.range**The candidate connecting homomorphism** `∂_{Γ,ρ} : Z¹_{Γ,ρ}(V) → H²_{Γ,ρ}(T)` (`cor:adjointboundary`, l.2005), the snake map of the degreewise-short-exact sequence of word complexes `0 → C(T) → C(M) → C(V) → 0` (`lem:exactcoefffunctor`, eq:coneshortexact). On a `V`-cocycle `c`, lift to `m̃ ∈ M⁴` with `p₄ m̃ = c`; then `d¹_M m̃ = i₂ t` for a unique `t ∈ T²`, and `∂c = [t] ∈ H²(T)`.dTT4 →ₗ[ZMod 2] T2dMM4 →ₗ[ZMod 2] M2dVV4 →ₗ[ZMod 2] V2i4T4 →ₗ[ZMod 2] M4p4M4 →ₗ[ZMod 2] V4i2T2 →ₗ[ZMod 2] M2p2M2 →ₗ[ZMod 2] V2hi2Function.Injective ⇑i2hex2p2.ker = i2.rangehnatV∀ (m : M4), p2 (dM m) = dV (p4 m)hp4Function.Surjective ⇑p4hex4p4.ker = i4.rangehnatM∀ (w : T4), dM (i4 w) = i2 (dT w)) c↥dV.ker=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`.dTT4 →ₗ[ZMod 2] T2.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern]..mkQSubmodule.mkQ.{u_1, u_2} {R : Type u_1} {M : Type u_2} [Ring R] [AddCommGroup M] [Module R M] (p : Submodule R M) : M →ₗ[R] M ⧸ pThe map from a module `M` to the quotient of `M` by a submodule `p` as a linear map.tT2**The defining property of the connecting map** (the snake recipe): for a `V`-cocycle `c`, any `M`-lift `m̃` with `p₄ m̃ = c`, and the unique `t` with `i₂ t = d¹_M m̃`, one has `∂c = [t]` in `H²(T)`. This confirms `connectingMap` is the genuine snake map of `lem:exactcoefffunctor`.
Proved in §5 of the paper. Ingredients: Theorem 5.7.
Lemma 5.12 of the paper (Simple characteristic-two modules are tame).
Let V be a simple \F_2[C]-module occurring in the induction. Then the
marked normal 2-subgroup of C acts trivially on V. Hence V factors
through the finite tame quotient of C.
Lean code for Lemma5.9●1 theorem
Associated Lean declarations
-
theoremdefined in Q2Presentation/Lifting/SectionDischarge.leancomplete
theorem Q2Presentation.Lifting.famWildFixed_ne_bot {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] {VType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.VType] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType] (ΦQ2Presentation.Lifting.OperatorFamily Yt V: Q2Presentation.Lifting.OperatorFamilyQ2Presentation.Lifting.OperatorFamily (Yt : Q2Presentation.BoundaryFramedTarget) (V : Type) [AddCommGroup V] [Module (ZMod 2) V] : TypeAn operator family with the conjugation antihomomorphism laws.YtQ2Presentation.BoundaryFramedTargetVType) [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.VType] [NontrivialNontrivial.{u_3} (α : Type u_3) : PropPredicate typeclass for expressing that a type is not reduced to a single element. In rings, this is equivalent to `0 ≠ 1`. In vector spaces, this is equivalent to positive dimension.VType] : Q2Presentation.Lifting.famWildFixedQ2Presentation.Lifting.famWildFixed {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) : Submodule (ZMod 2) VThe wild-fixed submodule `V^{L_Y}`.ΦQ2Presentation.Lifting.OperatorFamily Yt V≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.⊥Bot.bot.{u_1} {α : Type u_1} [self : Bot α] : αThe bot (`⊥`, `\bot`) element Conventions for notations in identifiers: * The recommended spelling of `⊥` in identifiers is `bot`.theorem Q2Presentation.Lifting.famWildFixed_ne_bot {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] {VType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.VType] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType] (ΦQ2Presentation.Lifting.OperatorFamily Yt V: Q2Presentation.Lifting.OperatorFamilyQ2Presentation.Lifting.OperatorFamily (Yt : Q2Presentation.BoundaryFramedTarget) (V : Type) [AddCommGroup V] [Module (ZMod 2) V] : TypeAn operator family with the conjugation antihomomorphism laws.YtQ2Presentation.BoundaryFramedTargetVType) [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.VType] [NontrivialNontrivial.{u_3} (α : Type u_3) : PropPredicate typeclass for expressing that a type is not reduced to a single element. In rings, this is equivalent to `0 ≠ 1`. In vector spaces, this is equivalent to positive dimension.VType] : Q2Presentation.Lifting.famWildFixedQ2Presentation.Lifting.famWildFixed {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Q2Presentation.Lifting.OperatorFamily Yt V) : Submodule (ZMod 2) VThe wild-fixed submodule `V^{L_Y}`.ΦQ2Presentation.Lifting.OperatorFamily Yt V≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.⊥Bot.bot.{u_1} {α : Type u_1} [self : Bot α] : αThe bot (`⊥`, `\bot`) element Conventions for notations in identifiers: * The recommended spelling of `⊥` in identifiers is `bot`.Nonzero wild-fixed vectors exist (`lem:simpletame`'s counting core).
Lemma 5.13 of the paper (Normal forms for nontrivial simple modules).
Let V be a nontrivial simple tame \F_2[C]-module. Every class in
H^1_{A,\rho}(V) has a unique representative supported on x_0:
(a,b,c,d)\sim(0,0,c,0).
More precisely, the two possible inertia cases are as follows.
-
If
\mathsf T=1, thenP=1,1+\mathsf S^{-1}is invertible, andZ^1_{A,\rho}(V)=\{(a,0,c,0):a,c\in V\},\qquad B^1_{A,\rho}(V)=\{((\mathsf S-1)v,0,0,0):v\in V\}. -
If
V^{\mathsf T}=0, thenP=0and\mathsf T-1=1+\mathsf Tis invertible. The wild row first forcesd=0. Subtracting the coboundary ofv=(\mathsf T-1)^{-1}bkillsb, and the tame row then forcesa=0.
Under the representatives (53), the degree-one pairing
with the corresponding representative \lambda\in V^\vee is
(c,\lambda)\longmapsto \begin{cases} \lambda(c),&\mathsf T=1,\\[1mm] \lambda((1+\mathsf U+\mathsf U^{-1})c),&V^{\mathsf T}=0. \end{cases}
Both operators in (54) are invertible.
Lean code for Lemma5.10●2 theorems
Associated Lean declarations
-
theoremdefined in Q2Presentation/Lifting/HeisenbergCup.leancomplete
theorem Q2Presentation.Lifting.powOmega2_pow_ordProj.{u_2} {G
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_2] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.GType u_2] (gG: GType u_2) : Q2Presentation.powOmega2Q2Presentation.powOmega2.{u_1} {G : Type u_1} [Group G] [Finite G] (g : G) : G`g` raised to the `ω₂`-power in a finite group: reduce `ω₂` modulo `orderOf g` and take the ordinary power. This depends only on `g` (through its order), not on any fixed verification modulus.gG^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`.2 ^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`.(orderOforderOf.{u_1} {G : Type u_1} [Monoid G] (x : G) : ℕ`orderOf x` is the order of the element `x`, i.e. the `n ≥ 1`, s.t. `x ^ n = 1` if it exists. Otherwise, i.e. if `x` is of infinite order, then `orderOf x` is `0` by convention.gG).factorizationNat.factorization (n : ℕ) : ℕ →₀ ℕ`n.factorization` is the finitely supported function `ℕ →₀ ℕ` mapping each prime factor of `n` to its multiplicity in `n`.2 =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 Q2Presentation.Lifting.powOmega2_pow_ordProj.{u_2} {G
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`. There is also a division operation `/` such that `a / b = a * b⁻¹`, with a default so that `a / b = a * b⁻¹` holds by definition. Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure on a type with the minimum proof obligations.GType u_2] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.GType u_2] (gG: GType u_2) : Q2Presentation.powOmega2Q2Presentation.powOmega2.{u_1} {G : Type u_1} [Group G] [Finite G] (g : G) : G`g` raised to the `ω₂`-power in a finite group: reduce `ω₂` modulo `orderOf g` and take the ordinary power. This depends only on `g` (through its order), not on any fixed verification modulus.gG^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`.2 ^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`.(orderOforderOf.{u_1} {G : Type u_1} [Monoid G] (x : G) : ℕ`orderOf x` is the order of the element `x`, i.e. the `n ≥ 1`, s.t. `x ^ n = 1` if it exists. Otherwise, i.e. if `x` is of infinite order, then `orderOf x` is `0` by convention.gG).factorizationNat.factorization (n : ℕ) : ℕ →₀ ℕ`n.factorization` is the finitely supported function `ℕ →₀ ℕ` mapping each prime factor of `n` to its multiplicity in `n`.2 =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`.1`powOmega2 g = g^{ω₂}` has **2-power order** (manuscript: `U = S^{ω₂}` has 2-power order, `lem:simplenormalforms`): `(g^{ω₂})^{ordProj[2](orderOf g)} = 1`. The exponent `ordProj[2] (orderOf g) = 2^{v₂(orderOf g)}` is a power of `2`. -
theoremdefined in Q2Presentation/Lifting/SimpleSectionRows.leancomplete
theorem Q2Presentation.Lifting.famRows_surjective_of_simple {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] {VType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.VType] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType] (ΦQ2Presentation.Lifting.OperatorFamily Yt V: Q2Presentation.Lifting.OperatorFamilyQ2Presentation.Lifting.OperatorFamily (Yt : Q2Presentation.BoundaryFramedTarget) (V : Type) [AddCommGroup V] [Module (ZMod 2) V] : TypeAn operator family with the conjugation antihomomorphism laws.YtQ2Presentation.BoundaryFramedTargetVType) (qQ2Presentation.Marking Yt.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.VType] (htwo2 ∣ Nat.card Yt.Y: 2 ∣Dvd.dvd.{u_1} {α : Type u_1} [self : Dvd α] : α → α → PropDivisibility. `a ∣ b` (typed as `\|`) means that there is some `c` such that `b = a * c`. Conventions for notations in identifiers: * The recommended spelling of `∣` in identifiers is `dvd`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (hx1Φ.op (q Q2Presentation.Gen.x1) = 1: ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.x1Q2Presentation.Gen.x1 : Q2Presentation.Gen) =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`.1) (hsimple∀ (U : Submodule (ZMod 2) V), (∀ m ∈ U, (Φ.op (q Q2Presentation.Gen.sigma)) m ∈ U) → (∀ m ∈ U, (Φ.op (q Q2Presentation.Gen.tau)) m ∈ U) → U = ⊥ ∨ U = ⊤: ∀ (USubmodule (ZMod 2) V: SubmoduleSubmodule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vA submodule of a module is one which is closed under vector operations. This is a sufficient condition for the subset of vectors in the submodule to themselves form a module.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType), (∀ mV∈ USubmodule (ZMod 2) V, (ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.sigmaQ2Presentation.Gen.sigma : Q2Presentation.Gen)) mV∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.USubmodule (ZMod 2) V) → (∀ mV∈ USubmodule (ZMod 2) V, (ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen)) mV∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.USubmodule (ZMod 2) V) → USubmodule (ZMod 2) V=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`.⊥Bot.bot.{u_1} {α : Type u_1} [self : Bot α] : αThe bot (`⊥`, `\bot`) element Conventions for notations in identifiers: * The recommended spelling of `⊥` in identifiers is `bot`.∨Or (a b : Prop) : Prop`Or a b`, or `a ∨ b`, is the disjunction of propositions. There are two constructors for `Or`, called `Or.inl : a → a ∨ b` and `Or.inr : b → a ∨ b`, and you can use `match` or `cases` to destruct an `Or` assumption into the two cases. Conventions for notations in identifiers: * The recommended spelling of `∨` in identifiers is `or`. * The recommended spelling of `\/` in identifiers is `or` (prefer `∨` over `\/`).USubmodule (ZMod 2) V=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`.⊤Top.top.{u_1} {α : Type u_1} [self : Top α] : αThe top (`⊤`, `\top`) element Conventions for notations in identifiers: * The recommended spelling of `⊤` in identifiers is `top`.) (hnontriv¬(Φ.op (q Q2Presentation.Gen.sigma) = 1 ∧ Φ.op (q Q2Presentation.Gen.tau) = 1): ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.(And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.sigmaQ2Presentation.Gen.sigma : Q2Presentation.Gen) =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`.1 ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen) =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`.1)And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).) (eℕ: ℕ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.) (hCeΦ.op (q Q2Presentation.Gen.tau) ^ e = 1: ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen) ^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`.eℕ=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`.1) (hoddOdd e: OddOdd.{u_2} {α : Type u_2} [Semiring α] (a : α) : PropAn element `a` of a semiring is odd if there exists `k` such `a = 2*k + 1`.eℕ) (heYe ∣ Nat.card Yt.Y: eℕ∣Dvd.dvd.{u_1} {α : Type u_1} [self : Dvd α] : α → α → PropDivisibility. `a ∣ b` (typed as `\|`) means that there is some `c` such that `b = a * c`. Conventions for notations in identifiers: * The recommended spelling of `∣` in identifiers is `dvd`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (hcommΦ.op (q Q2Presentation.Gen.tau) * Φ.op (q Q2Presentation.Gen.sigma) = Φ.op (q Q2Presentation.Gen.sigma) * Φ.op (q Q2Presentation.Gen.tau) ^ ((e + 1) / 2): ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen) *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`.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.sigmaQ2Presentation.Gen.sigma : Q2Presentation.Gen) =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`.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.sigmaQ2Presentation.Gen.sigma : Q2Presentation.Gen) *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`.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen) ^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`.(HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.(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`.eℕ+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`./HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.2)HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.) (uvV × V: VType×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.VType) : ∃ nQ2Presentation.Gen → V, (Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → VQ2Presentation.Q2Word.tameRelatorQ2Presentation.Q2Word.tameRelator : Q2Presentation.GExprThe tame relator `τ^σ · (τ²)⁻¹` (the relation `τ^σ = τ²`).,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → VQ2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`).)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.=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`.uvV × Vtheorem Q2Presentation.Lifting.famRows_surjective_of_simple {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] {VType: TypeA type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.VType] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType] (ΦQ2Presentation.Lifting.OperatorFamily Yt V: Q2Presentation.Lifting.OperatorFamilyQ2Presentation.Lifting.OperatorFamily (Yt : Q2Presentation.BoundaryFramedTarget) (V : Type) [AddCommGroup V] [Module (ZMod 2) V] : TypeAn operator family with the conjugation antihomomorphism laws.YtQ2Presentation.BoundaryFramedTargetVType) (qQ2Presentation.Marking Yt.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.VType] (htwo2 ∣ Nat.card Yt.Y: 2 ∣Dvd.dvd.{u_1} {α : Type u_1} [self : Dvd α] : α → α → PropDivisibility. `a ∣ b` (typed as `\|`) means that there is some `c` such that `b = a * c`. Conventions for notations in identifiers: * The recommended spelling of `∣` in identifiers is `dvd`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (hx1Φ.op (q Q2Presentation.Gen.x1) = 1: ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.x1Q2Presentation.Gen.x1 : Q2Presentation.Gen) =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`.1) (hsimple∀ (U : Submodule (ZMod 2) V), (∀ m ∈ U, (Φ.op (q Q2Presentation.Gen.sigma)) m ∈ U) → (∀ m ∈ U, (Φ.op (q Q2Presentation.Gen.tau)) m ∈ U) → U = ⊥ ∨ U = ⊤: ∀ (USubmodule (ZMod 2) V: SubmoduleSubmodule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vA submodule of a module is one which is closed under vector operations. This is a sufficient condition for the subset of vectors in the submodule to themselves form a module.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) VType), (∀ mV∈ USubmodule (ZMod 2) V, (ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.sigmaQ2Presentation.Gen.sigma : Q2Presentation.Gen)) mV∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.USubmodule (ZMod 2) V) → (∀ mV∈ USubmodule (ZMod 2) V, (ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen)) mV∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.USubmodule (ZMod 2) V) → USubmodule (ZMod 2) V=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`.⊥Bot.bot.{u_1} {α : Type u_1} [self : Bot α] : αThe bot (`⊥`, `\bot`) element Conventions for notations in identifiers: * The recommended spelling of `⊥` in identifiers is `bot`.∨Or (a b : Prop) : Prop`Or a b`, or `a ∨ b`, is the disjunction of propositions. There are two constructors for `Or`, called `Or.inl : a → a ∨ b` and `Or.inr : b → a ∨ b`, and you can use `match` or `cases` to destruct an `Or` assumption into the two cases. Conventions for notations in identifiers: * The recommended spelling of `∨` in identifiers is `or`. * The recommended spelling of `\/` in identifiers is `or` (prefer `∨` over `\/`).USubmodule (ZMod 2) V=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`.⊤Top.top.{u_1} {α : Type u_1} [self : Top α] : αThe top (`⊤`, `\top`) element Conventions for notations in identifiers: * The recommended spelling of `⊤` in identifiers is `top`.) (hnontriv¬(Φ.op (q Q2Presentation.Gen.sigma) = 1 ∧ Φ.op (q Q2Presentation.Gen.tau) = 1): ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.(And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.sigmaQ2Presentation.Gen.sigma : Q2Presentation.Gen) =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`.1 ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen) =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`.1)And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).) (eℕ: ℕ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.) (hCeΦ.op (q Q2Presentation.Gen.tau) ^ e = 1: ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen) ^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`.eℕ=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`.1) (hoddOdd e: OddOdd.{u_2} {α : Type u_2} [Semiring α] (a : α) : PropAn element `a` of a semiring is odd if there exists `k` such `a = 2*k + 1`.eℕ) (heYe ∣ Nat.card Yt.Y: eℕ∣Dvd.dvd.{u_1} {α : Type u_1} [self : Dvd α] : α → α → PropDivisibility. `a ∣ b` (typed as `\|`) means that there is some `c` such that `b = a * c`. Conventions for notations in identifiers: * The recommended spelling of `∣` in identifiers is `dvd`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (hcommΦ.op (q Q2Presentation.Gen.tau) * Φ.op (q Q2Presentation.Gen.sigma) = Φ.op (q Q2Presentation.Gen.sigma) * Φ.op (q Q2Presentation.Gen.tau) ^ ((e + 1) / 2): ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen) *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`.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.sigmaQ2Presentation.Gen.sigma : Q2Presentation.Gen) =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`.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.sigmaQ2Presentation.Gen.sigma : Q2Presentation.Gen) *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`.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(qQ2Presentation.Marking Yt.YQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen) ^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`.(HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.(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`.eℕ+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`./HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.2)HDiv.hDiv.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HDiv α β γ] : α → β → γ`a / b` computes the result of dividing `a` by `b`. The meaning of this notation is type-dependent. * For most types like `Nat`, `Int`, `Rat`, `Real`, `a / 0` is defined to be `0`. * For `Nat`, `a / b` rounds downwards. * For `Int`, `a / b` rounds downwards if `b` is positive or upwards if `b` is negative. It is implemented as `Int.ediv`, the unique function satisfying `a % b + b * (a / b) = a` and `0 ≤ a % b < natAbs b` for `b ≠ 0`. Other rounding conventions are available using the functions `Int.fdiv` (floor rounding) and `Int.tdiv` (truncation rounding). * For `Float`, `a / 0` follows the IEEE 754 semantics for division, usually resulting in `inf` or `nan`. Conventions for notations in identifiers: * The recommended spelling of `/` in identifiers is `div`.) (uvV × V: VType×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.VType) : ∃ nQ2Presentation.Gen → V, (Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → VQ2Presentation.Q2Word.tameRelatorQ2Presentation.Q2Word.tameRelator : Q2Presentation.GExprThe tame relator `τ^σ · (τ²)⁻¹` (the relation `τ^σ = τ²`).,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.ΦQ2Presentation.Lifting.OperatorFamily Yt V.opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking Yt.YnQ2Presentation.Gen → VQ2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`).)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.=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`.uvV × V**Abstract simple-module row surjectivity** (`lem:simplenormalforms`): on a σ/τ-simple module with nontrivial action, trivial `x₁`-operator, and the tame relations, the rows are surjective.
Proved in §5 of the paper. Ingredients: Lemma 5.11.
Lemma 5.14 of the paper (Mixed Hessian calculation).
Let V be a nontrivial simple tame module, put \mathsf U=\mathsf S^\w, and represent a class in H^1_{A,\rho}(V) by the cocycle supported on x_0 with value c. Represent the dual class similarly by \lambda\in V^\vee. The mixed central contributions are
\begin{array}{c|cc} \text{word contribution}&\mathsf T=1&V^{\mathsf T}=0\\ \hline r_{\mathrm t}&0&0\\ h_0&\lambda(c)&\lambda(c)\\ {[d_0,z_0]}&0&\lambda(\mathsf Uc)+\lambda(\mathsf U^{-1}c)\\ \text{all other factors of }r_{\mathrm w}&0&0. \end{array}
Consequently the degree-one pairing is induced by
\begin{cases} 1,&\mathsf T=1,\\ 1+\mathsf U+\mathsf U^{-1},&V^{\mathsf T}=0. \end{cases}
Lean code for Lemma5.11●3 theorems
Associated Lean declarations
-
theoremdefined in Q2Presentation/Lifting/HeisenbergCup.leancomplete
theorem Q2Presentation.Lifting.pairingOp_isUnit.{u_1} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] (U(Module.End (ZMod 2) A)ˣ: (Module.EndModule.End.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vLinear endomorphisms of a module, with associated ring structure `Module.End.semiring` and algebra structure `Module.End.algebra`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1)ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`. An element of a `Monoid` is a unit if it has a two-sided inverse. This version bundles the inverse element so that it can be computed. For a predicate see `IsUnit`.) (hnilIsNilpotent (↑U - 1): IsNilpotentIsNilpotent.{u_3} {R : Type u_3} [Zero R] [Pow R ℕ] (x : R) : PropAn element is said to be nilpotent if some natural-number-power of it equals zero. Note that we require only the bare minimum assumptions for the definition to make sense. Even `MonoidWithZero` is too strong since nilpotency is important in the study of rings that are only power-associative.(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).↑U(Module.End (ZMod 2) A)ˣ-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).) : IsUnitIsUnit.{u_1} {M : Type u_1} [Monoid M] (a : M) : PropAn element `a : M` of a `Monoid` is a unit if it has a two-sided inverse. The actual definition says that `a` is equal to some `u : Mˣ`, where `Mˣ` is a bundled version of `IsUnit`.(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`.↑U(Module.End (ZMod 2) A)ˣ+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`.↑U(Module.End (ZMod 2) A)ˣ⁻¹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`.)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 Q2Presentation.Lifting.pairingOp_isUnit.{u_1} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] (U(Module.End (ZMod 2) A)ˣ: (Module.EndModule.End.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vLinear endomorphisms of a module, with associated ring structure `Module.End.semiring` and algebra structure `Module.End.algebra`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1)ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`. An element of a `Monoid` is a unit if it has a two-sided inverse. This version bundles the inverse element so that it can be computed. For a predicate see `IsUnit`.) (hnilIsNilpotent (↑U - 1): IsNilpotentIsNilpotent.{u_3} {R : Type u_3} [Zero R] [Pow R ℕ] (x : R) : PropAn element is said to be nilpotent if some natural-number-power of it equals zero. Note that we require only the bare minimum assumptions for the definition to make sense. Even `MonoidWithZero` is too strong since nilpotency is important in the study of rings that are only power-associative.(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).↑U(Module.End (ZMod 2) A)ˣ-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).) : IsUnitIsUnit.{u_1} {M : Type u_1} [Monoid M] (a : M) : PropAn element `a : M` of a `Monoid` is a unit if it has a two-sided inverse. The actual definition says that `a` is equal to some `u : Mˣ`, where `Mˣ` is a bundled version of `IsUnit`.(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`.↑U(Module.End (ZMod 2) A)ˣ+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`.↑U(Module.End (ZMod 2) A)ˣ⁻¹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`.)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`.**The mixed-Hessian pairing operator is invertible** (`lem:mixedhessian`, `lem:simplenormalforms`): for a unipotent unit `U` (i.e. `U−1` nilpotent), `1 + U + U⁻¹` is a unit of `End A`. Indeed `U·(1+U+U⁻¹) = 1+U+U² = 1+(N+N²)` with `N = U−1` nilpotent, hence a unit; and `U` is a unit.
-
theoremdefined in Q2Presentation/Lifting/HeisenbergCup.leancomplete
theorem Q2Presentation.Lifting.mixedHessian_value.{u_1} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] (U(Module.End (ZMod 2) A)ˣ: (Module.EndModule.End.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vLinear endomorphisms of a module, with associated ring structure `Module.End.semiring` and algebra structure `Module.End.algebra`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1)ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`. An element of a `Monoid` is a unit if it has a two-sided inverse. This version bundles the inverse element so that it can be computed. For a predicate see `IsUnit`.) (cA: AType u_1) (lQ2Presentation.Lifting.Dual A: Q2Presentation.Lifting.DualQ2Presentation.Lifting.Dual.{u_2} (A : Type u_2) [AddCommGroup A] [Module (ZMod 2) A] : Type u_2The `F₂`-linear dual `A^∨ = Hom_{F₂}(A, F₂)`.AType u_1) : lQ2Presentation.Lifting.Dual AcA+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`.{Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AvAThe primal `A`-coordinate `D_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AcA,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AdlQ2Presentation.Lifting.Dual AThe dual `A^∨`-coordinate `D^∨_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AlQ2Presentation.Lifting.Dual A,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AzZMod 2The central `F₂`-coordinate `β_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A0 }Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A.bclQ2Presentation.Lifting.HeisQ.bcl.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] (u w : Q2Presentation.Lifting.HeisQ A) : ZMod 2The **bilinear commutator pairing** of the class-two coefficient group (`lem:fullwordledger`, l.1411): the central coordinate of the commutator `⁅u, w⁆ = u⁻¹ w⁻¹ u w` (project convention, matching `Q2Word.commExpr`) is `b_cl(u, w) = (D^∨_u)(D_w) + (D^∨_w)(D_u)`.{Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AvAThe primal `A`-coordinate `D_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A↑U(Module.End (ZMod 2) A)ˣ⁻¹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`.cA,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AdlModule.Dual (ZMod 2) AThe dual `A^∨`-coordinate `D^∨_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A(LinearMap.dualMapLinearMap.dualMap.{u_1, u_2, u_3} {R : Type u_1} {M₁ : Type u_2} {M₂ : Type u_3} [CommSemiring R] [AddCommMonoid M₁] [Module R M₁] [AddCommMonoid M₂] [Module R M₂] (f : M₁ →ₗ[R] M₂) : Module.Dual R M₂ →ₗ[R] Module.Dual R M₁Given a linear map `f : M₁ →ₗ[R] M₂`, `f.dualMap` is the linear map between the dual of `M₂` and `M₁` such that it maps the functional `φ` to `φ ∘ f`.↑U(Module.End (ZMod 2) A)ˣ) lQ2Presentation.Lifting.Dual A,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AzZMod 2The central `F₂`-coordinate `β_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A0 }Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A=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`.lQ2Presentation.Lifting.Dual A((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`.↑U(Module.End (ZMod 2) A)ˣ+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`.↑U(Module.End (ZMod 2) A)ˣ⁻¹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`.)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`.cA)theorem Q2Presentation.Lifting.mixedHessian_value.{u_1} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] (U(Module.End (ZMod 2) A)ˣ: (Module.EndModule.End.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vLinear endomorphisms of a module, with associated ring structure `Module.End.semiring` and algebra structure `Module.End.algebra`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1)ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`. An element of a `Monoid` is a unit if it has a two-sided inverse. This version bundles the inverse element so that it can be computed. For a predicate see `IsUnit`.) (cA: AType u_1) (lQ2Presentation.Lifting.Dual A: Q2Presentation.Lifting.DualQ2Presentation.Lifting.Dual.{u_2} (A : Type u_2) [AddCommGroup A] [Module (ZMod 2) A] : Type u_2The `F₂`-linear dual `A^∨ = Hom_{F₂}(A, F₂)`.AType u_1) : lQ2Presentation.Lifting.Dual AcA+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`.{Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AvAThe primal `A`-coordinate `D_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AcA,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AdlQ2Presentation.Lifting.Dual AThe dual `A^∨`-coordinate `D^∨_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AlQ2Presentation.Lifting.Dual A,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AzZMod 2The central `F₂`-coordinate `β_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A0 }Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A.bclQ2Presentation.Lifting.HeisQ.bcl.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] (u w : Q2Presentation.Lifting.HeisQ A) : ZMod 2The **bilinear commutator pairing** of the class-two coefficient group (`lem:fullwordledger`, l.1411): the central coordinate of the commutator `⁅u, w⁆ = u⁻¹ w⁻¹ u w` (project convention, matching `Q2Word.commExpr`) is `b_cl(u, w) = (D^∨_u)(D_w) + (D^∨_w)(D_u)`.{Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AvAThe primal `A`-coordinate `D_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A↑U(Module.End (ZMod 2) A)ˣ⁻¹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`.cA,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AdlModule.Dual (ZMod 2) AThe dual `A^∨`-coordinate `D^∨_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A(LinearMap.dualMapLinearMap.dualMap.{u_1, u_2, u_3} {R : Type u_1} {M₁ : Type u_2} {M₂ : Type u_3} [CommSemiring R] [AddCommMonoid M₁] [Module R M₁] [AddCommMonoid M₂] [Module R M₂] (f : M₁ →ₗ[R] M₂) : Module.Dual R M₂ →ₗ[R] Module.Dual R M₁Given a linear map `f : M₁ →ₗ[R] M₂`, `f.dualMap` is the linear map between the dual of `M₂` and `M₁` such that it maps the functional `φ` to `φ ∘ f`.↑U(Module.End (ZMod 2) A)ˣ) lQ2Presentation.Lifting.Dual A,Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ AzZMod 2The central `F₂`-coordinate `β_u`.:=Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A0 }Q2Presentation.Lifting.HeisQ.mk.{u_2} {A : Type u_2} [AddCommGroup A] [Module (ZMod 2) A] (v : A) (dl : Q2Presentation.Lifting.Dual A) (z : ZMod 2) : Q2Presentation.Lifting.HeisQ A=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`.lQ2Presentation.Lifting.Dual A((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`.↑U(Module.End (ZMod 2) A)ˣ+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`.↑U(Module.End (ZMod 2) A)ˣ⁻¹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`.)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`.cA)**The mixed-Hessian central value** (`lem:mixedhessian`, l.1871–1915, ramified case `P=0`): assembling the central ledger of `lem:fullwordledger`, the `h₀` square diagonal `λ(c)` plus the `[d₀,z₀]` commutator pairing `b_cl` of the `d₀`-shadow `(c, λ, 0)` and `z₀`-shadow `(U⁻¹c, U^∨λ, 0)` equals `λ((1+U+U⁻¹)c)`. Together with `pairingOp_isUnit` this is the perfect degree-one cup pairing.
-
theoremdefined in Q2Presentation/Lifting/HeisenbergCup.leancomplete
theorem Q2Presentation.Lifting.pairingOp_powOmega2_isUnit.{u_1} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.AType u_1] (S(Module.End (ZMod 2) A)ˣ: (Module.EndModule.End.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vLinear endomorphisms of a module, with associated ring structure `Module.End.semiring` and algebra structure `Module.End.algebra`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1)ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`. An element of a `Monoid` is a unit if it has a two-sided inverse. This version bundles the inverse element so that it can be computed. For a predicate see `IsUnit`.) : IsUnitIsUnit.{u_1} {M : Type u_1} [Monoid M] (a : M) : PropAn element `a : M` of a `Monoid` is a unit if it has a two-sided inverse. The actual definition says that `a` is equal to some `u : Mˣ`, where `Mˣ` is a bundled version of `IsUnit`.(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`.↑(Q2Presentation.powOmega2Q2Presentation.powOmega2.{u_1} {G : Type u_1} [Group G] [Finite G] (g : G) : G`g` raised to the `ω₂`-power in a finite group: reduce `ω₂` modulo `orderOf g` and take the ordinary power. This depends only on `g` (through its order), not on any fixed verification modulus.S(Module.End (ZMod 2) A)ˣ) +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`.↑(Q2Presentation.powOmega2Q2Presentation.powOmega2.{u_1} {G : Type u_1} [Group G] [Finite G] (g : G) : G`g` raised to the `ω₂`-power in a finite group: reduce `ω₂` modulo `orderOf g` and take the ordinary power. This depends only on `g` (through its order), not on any fixed verification modulus.S(Module.End (ZMod 2) A)ˣ)⁻¹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`.)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 Q2Presentation.Lifting.pairingOp_powOmega2_isUnit.{u_1} {A
Type u_1: Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.AType u_1] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1] [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.AType u_1] (S(Module.End (ZMod 2) A)ˣ: (Module.EndModule.End.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vLinear endomorphisms of a module, with associated ring structure `Module.End.semiring` and algebra structure `Module.End.algebra`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AType u_1)ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`. An element of a `Monoid` is a unit if it has a two-sided inverse. This version bundles the inverse element so that it can be computed. For a predicate see `IsUnit`.) : IsUnitIsUnit.{u_1} {M : Type u_1} [Monoid M] (a : M) : PropAn element `a : M` of a `Monoid` is a unit if it has a two-sided inverse. The actual definition says that `a` is equal to some `u : Mˣ`, where `Mˣ` is a bundled version of `IsUnit`.(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`.↑(Q2Presentation.powOmega2Q2Presentation.powOmega2.{u_1} {G : Type u_1} [Group G] [Finite G] (g : G) : G`g` raised to the `ω₂`-power in a finite group: reduce `ω₂` modulo `orderOf g` and take the ordinary power. This depends only on `g` (through its order), not on any fixed verification modulus.S(Module.End (ZMod 2) A)ˣ) +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`.↑(Q2Presentation.powOmega2Q2Presentation.powOmega2.{u_1} {G : Type u_1} [Group G] [Finite G] (g : G) : G`g` raised to the `ω₂`-power in a finite group: reduce `ω₂` modulo `orderOf g` and take the ordinary power. This depends only on `g` (through its order), not on any fixed verification modulus.S(Module.End (ZMod 2) A)ˣ)⁻¹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`.)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`.**The mixed-Hessian pairing operator for `U = S^{ω₂}` is invertible** (`lem:mixedhessian` + `lem:simplenormalforms`): for any unit `S` of `End A` (the `σ`-action; `A` finite), the operator `1 + S^{ω₂} + (S^{ω₂})⁻¹` is a unit, because `S^{ω₂}` has `2`-power order, hence is unipotent.
Proved in §5 of the paper. Ingredients: Lemma 5.3.
-
Q2Presentation.Induction.delWeakZ1_card_gammaA_of[complete] -
Q2Presentation.Induction.edgeDelSurj_gammaA[complete] -
Q2Presentation.Induction.sec7_xr_bockstein_witness[complete] -
Q2Presentation.Induction.sec7_xr_layer_data[complete] -
Q2Presentation.Induction.weakZ1_tChild_card_gammaA_intrinsic[complete] -
Q2Presentation.Induction.weakZ1_vLayer_card_gammaA_intrinsic[complete] -
Q2Presentation.Lifting.rowMap_card_two_apply[complete] -
Q2Presentation.Lifting.cupToDual_injective[complete] -
Q2Presentation.Lifting.cupEquivDual[complete] -
Q2Presentation.Lifting.finrank_H1_eq_dual[complete] -
Q2Presentation.Lifting.Z1_trivial_equiv_model[complete] -
Q2Presentation.Lifting.cupFormQ_nondegenerate[complete] -
Q2Presentation.Lifting.rowMap_scalarRelKernel_apply[complete]
Proposition 5.15 of the paper (Candidate deformation duality).
For every elementary \F_2[C]-module A, the chain map (46) is a quasi-isomorphism. Hence
H^2_{A,\rho}(A)^\vee\cong (A^\vee)^C, \qquad \dim Z^1_{A,\rho}(A)=2\dim A+\dim(A^\vee)^C.
The induced pairings
H^i_{A,\rho}(A)\times H^{2-i}_{A,\rho}(A^\vee)\to\F_2
are perfect and natural in A.
Lean code for Theorem5.12●13 declarations
Associated Lean declarations
-
Q2Presentation.Induction.delWeakZ1_card_gammaA_of[complete]
-
Q2Presentation.Induction.edgeDelSurj_gammaA[complete]
-
Q2Presentation.Induction.sec7_xr_bockstein_witness[complete]
-
Q2Presentation.Induction.sec7_xr_layer_data[complete]
-
Q2Presentation.Induction.weakZ1_tChild_card_gammaA_intrinsic[complete]
-
Q2Presentation.Induction.weakZ1_vLayer_card_gammaA_intrinsic[complete]
-
Q2Presentation.Lifting.rowMap_card_two_apply[complete]
-
Q2Presentation.Lifting.cupToDual_injective[complete]
-
Q2Presentation.Lifting.cupEquivDual[complete]
-
Q2Presentation.Lifting.finrank_H1_eq_dual[complete]
-
Q2Presentation.Lifting.Z1_trivial_equiv_model[complete]
-
Q2Presentation.Lifting.cupFormQ_nondegenerate[complete]
-
Q2Presentation.Lifting.rowMap_scalarRelKernel_apply[complete]
-
Q2Presentation.Induction.delWeakZ1_card_gammaA_of[complete] -
Q2Presentation.Induction.edgeDelSurj_gammaA[complete] -
Q2Presentation.Induction.sec7_xr_bockstein_witness[complete] -
Q2Presentation.Induction.sec7_xr_layer_data[complete] -
Q2Presentation.Induction.weakZ1_tChild_card_gammaA_intrinsic[complete] -
Q2Presentation.Induction.weakZ1_vLayer_card_gammaA_intrinsic[complete] -
Q2Presentation.Lifting.rowMap_card_two_apply[complete] -
Q2Presentation.Lifting.cupToDual_injective[complete] -
Q2Presentation.Lifting.cupEquivDual[complete] -
Q2Presentation.Lifting.finrank_H1_eq_dual[complete] -
Q2Presentation.Lifting.Z1_trivial_equiv_model[complete] -
Q2Presentation.Lifting.cupFormQ_nondegenerate[complete] -
Q2Presentation.Lifting.rowMap_scalarRelKernel_apply[complete]
-
theoremdefined in Q2Presentation/Induction/EdgeDelSurjDischarge.leancomplete
theorem Q2Presentation.Induction.delWeakZ1_card_gammaA_of {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K): SubmoduleSubmodule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vA submodule of a module is one which is closed under vector operations. This is a sufficient condition for the subset of vectors in the submodule to themselves form a module.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Induction.towerMQ2Presentation.Induction.towerM {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : TypeThe additive elementary module layer `M = K/Φ(K)` (`lem:simplehead`).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) (hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S: ∀ (cQ2Presentation.Induction.towerC K: Q2Presentation.Induction.towerCQ2Presentation.Induction.towerC {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : TypeThe lower target `C = Y/K` (`eq:targettower`).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor), ∀ mQ2Presentation.Induction.towerM K∈ SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K), ((Q2Presentation.Induction.towerActMQ2Presentation.Induction.towerActM {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : Q2Presentation.Induction.towerC K →* Q2Presentation.Induction.towerM K ≃ₗ[ZMod 2] Q2Presentation.Induction.towerM KThe conjugation action of the lower target `C = Y/K` on the additive module `M = K/Φ(K)`, as `ZMod 2`-linear equivalences — the manuscript's `𝔽₂[C]`-module structure on `M` (`lem:simplehead`), fully constructed.KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) cQ2Presentation.Induction.towerC K) mQ2Presentation.Induction.towerM K∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K)) (ρQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd: Q2Presentation.boundaryFramedSurjQ2Presentation.boundaryFramedSurj {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (Yt : Q2Presentation.BoundaryFramedTarget) (F : Q2Presentation.BoundaryFrame Yt) : TypeThe **boundary-framed surjections** `e_Γ^β(𝒴)` (manuscript `eq:eGamma`): the continuous surjections `f : Γ ↠ Y` whose induced map to `H × E` is the prescribed `β ∘ b_Γ`, i.e. `q_Y ∘ f = β ∘ b_Γ`. This is the subtype counted in Theorem 4.2; its cardinality is `e_Γ^β(𝒴)`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.Induction.cChildQ2Presentation.Induction.cChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The C-child framed pair** (the carrier of `X_Γ(C)`; manuscript `C = Y/K` via `B/M' ≅ C`, `mChildCollapse`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.cChildQ2Presentation.Induction.cChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The C-child framed pair** (the carrier of `X_Γ(C)`; manuscript `C = Y/K` via `B/M' ≅ C`, `mChildCollapse`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.) (h44 ∣ Nat.card (Q2Presentation.Induction.towerM K ⧸ S): 4 ∣Dvd.dvd.{u_1} {α : Type u_1} [self : Dvd α] : α → α → PropDivisibility. `a ∣ b` (typed as `\|`) means that there is some `c` such that `b = a * c`. Conventions for notations in identifiers: * The recommended spelling of `∣` in identifiers is `dvd`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.Q2Presentation.Induction.towerMQ2Presentation.Induction.towerM {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : TypeThe additive elementary module layer `M = K/Φ(K)` (`lem:simplehead`).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K))HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.) (EQ2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.delTarget chief K S hS): Q2Presentation.Lifting.ElementaryKernelQ2Presentation.Lifting.ElementaryKernel (Yt : Q2Presentation.BoundaryFramedTarget) : TypeA normal subgroup of a framed target that is killed by the decoration, contained in the wild kernel, **abelian**, and of **exponent 2** — the shape of the chief kernels the cochain keeps quantify over.(Q2Presentation.Induction.delTargetQ2Presentation.Induction.delTarget {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (S : Submodule (ZMod 2) (Q2Presentation.Induction.towerM K)) (hS : ∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S) : Q2Presentation.BoundaryFramedTarget**The split-tower framed target**: `Y := W ⋊ C-child`, tame data and decoration pulled through `rightHom`; `H` and `E` are the `C`-child's on the nose.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorSSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K)hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S)) (hcover∀ (y : (Q2Presentation.Induction.delTarget chief K S hS).Y), ∃ c ∈ Subgroup.closure (Set.range (Q2Presentation.Induction.weakMarking (Q2Presentation.Induction.delBase chief K S hS Q2Presentation.boundaryPackage_GammaA ρ))), (Q2Presentation.Lifting.conjFamily E).op (y * c⁻¹) = 1: ∀ (y(Q2Presentation.Induction.delTarget chief K S hS).Y: (Q2Presentation.Induction.delTargetQ2Presentation.Induction.delTarget {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (S : Submodule (ZMod 2) (Q2Presentation.Induction.towerM K)) (hS : ∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S) : Q2Presentation.BoundaryFramedTarget**The split-tower framed target**: `Y := W ⋊ C-child`, tame data and decoration pulled through `rightHom`; `H` and `E` are the `C`-child's on the nose.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorSSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K)hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), ∃ c(Q2Presentation.Induction.delTarget chief K S hS).Y∈ Subgroup.closureSubgroup.closure.{u_1} {G : Type u_1} [Group G] (k : Set G) : Subgroup GThe `Subgroup` generated by a set.(Set.rangeSet.range.{u, u_1} {α : Type u} {ι : Sort u_1} (f : ι → α) : Set αRange of a function. This function is more flexible than `f '' univ`, as the image requires that the domain is in Type and not an arbitrary Sort.(Q2Presentation.Induction.weakMarkingQ2Presentation.Induction.weakMarking {Yt : Q2Presentation.BoundaryFramedTarget} (h : Q2Presentation.GammaA ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Q2Presentation.Marking Yt.Y**The hom-induced marking**: the generator values of a continuous hom out of the candidate. Every weak-base object of this file is spelled at THIS marking (one-spelling discipline; `liftMarking` is its framed-lift restriction).(Q2Presentation.Induction.delBaseQ2Presentation.Induction.delBase {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (S : Submodule (ZMod 2) (Q2Presentation.Induction.towerM K)) (hS : ∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (ρ : Q2Presentation.boundaryFramedSurj B (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd) : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of (Q2Presentation.Induction.delTarget chief K S hS).Y)**The split-tower base**: `γ ↦ inr (ρ γ)` (a continuous hom for every `ρ` — no obstruction, unlike the arithmetic `Y'/T'_χ`-tower).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorSSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K)hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ SQ2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.ρQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd))), (Q2Presentation.Lifting.conjFamilyQ2Presentation.Lifting.conjFamily {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Q2Presentation.Lifting.OperatorFamily Yt (Q2Presentation.Lifting.NAdd E)The concrete conjugation family of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.delTarget chief K S hS)).opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(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`.y(Q2Presentation.Induction.delTarget chief K S hS).Y*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`.c(Q2Presentation.Induction.delTarget chief K S hS).Y⁻¹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`.)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`.1) : Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Induction.weakZ1Q2Presentation.Induction.weakZ1 {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) {Γ : ProfiniteGrp.{0}} (h : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Type**The weak-base twisted-cocycle set** of an ARBITRARY continuous hom into the target, relative to an elementary kernel — the weak-base generalization of `TorsorProgram.Z1` (no surjectivity onto the quotient imposed; the basepoint is the hom itself). Carrier chosen to match the `EdgeTwistLocalCore` twist layer verbatim.EQ2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.delTarget chief K S hS)(Q2Presentation.Induction.delBaseQ2Presentation.Induction.delBase {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (S : Submodule (ZMod 2) (Q2Presentation.Induction.towerM K)) (hS : ∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (ρ : Q2Presentation.boundaryFramedSurj B (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd) : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of (Q2Presentation.Induction.delTarget chief K S hS).Y)**The split-tower base**: `γ ↦ inr (ρ γ)` (a continuous hom for every `ρ` — no obstruction, unlike the arithmetic `Y'/T'_χ`-tower).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorSSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K)hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ SQ2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.ρQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd)) =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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.delTarget chief K S hS)) ^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`.2 *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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Lifting.conjInvDualsQ2Presentation.Lifting.conjInvDuals {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Submodule (ZMod 2) (Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E))The conjugation-invariant duals `X = (R^∨)^Y = (R^∨)^C` of an elementary kernel (consumer spelling of the manuscript's `𝒳_R`, §7 l.3720–3723).EQ2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.delTarget chief K S hS))theorem Q2Presentation.Induction.delWeakZ1_card_gammaA_of {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K): SubmoduleSubmodule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vA submodule of a module is one which is closed under vector operations. This is a sufficient condition for the subset of vectors in the submodule to themselves form a module.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Induction.towerMQ2Presentation.Induction.towerM {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : TypeThe additive elementary module layer `M = K/Φ(K)` (`lem:simplehead`).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) (hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S: ∀ (cQ2Presentation.Induction.towerC K: Q2Presentation.Induction.towerCQ2Presentation.Induction.towerC {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : TypeThe lower target `C = Y/K` (`eq:targettower`).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor), ∀ mQ2Presentation.Induction.towerM K∈ SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K), ((Q2Presentation.Induction.towerActMQ2Presentation.Induction.towerActM {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : Q2Presentation.Induction.towerC K →* Q2Presentation.Induction.towerM K ≃ₗ[ZMod 2] Q2Presentation.Induction.towerM KThe conjugation action of the lower target `C = Y/K` on the additive module `M = K/Φ(K)`, as `ZMod 2`-linear equivalences — the manuscript's `𝔽₂[C]`-module structure on `M` (`lem:simplehead`), fully constructed.KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) cQ2Presentation.Induction.towerC K) mQ2Presentation.Induction.towerM K∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K)) (ρQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd: Q2Presentation.boundaryFramedSurjQ2Presentation.boundaryFramedSurj {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (Yt : Q2Presentation.BoundaryFramedTarget) (F : Q2Presentation.BoundaryFrame Yt) : TypeThe **boundary-framed surjections** `e_Γ^β(𝒴)` (manuscript `eq:eGamma`): the continuous surjections `f : Γ ↠ Y` whose induced map to `H × E` is the prescribed `β ∘ b_Γ`, i.e. `q_Y ∘ f = β ∘ b_Γ`. This is the subtype counted in Theorem 4.2; its cardinality is `e_Γ^β(𝒴)`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.Induction.cChildQ2Presentation.Induction.cChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The C-child framed pair** (the carrier of `X_Γ(C)`; manuscript `C = Y/K` via `B/M' ≅ C`, `mChildCollapse`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.cChildQ2Presentation.Induction.cChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The C-child framed pair** (the carrier of `X_Γ(C)`; manuscript `C = Y/K` via `B/M' ≅ C`, `mChildCollapse`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.) (h44 ∣ Nat.card (Q2Presentation.Induction.towerM K ⧸ S): 4 ∣Dvd.dvd.{u_1} {α : Type u_1} [self : Dvd α] : α → α → PropDivisibility. `a ∣ b` (typed as `\|`) means that there is some `c` such that `b = a * c`. Conventions for notations in identifiers: * The recommended spelling of `∣` in identifiers is `dvd`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.Q2Presentation.Induction.towerMQ2Presentation.Induction.towerM {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : TypeThe additive elementary module layer `M = K/Φ(K)` (`lem:simplehead`).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K))HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.) (EQ2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.delTarget chief K S hS): Q2Presentation.Lifting.ElementaryKernelQ2Presentation.Lifting.ElementaryKernel (Yt : Q2Presentation.BoundaryFramedTarget) : TypeA normal subgroup of a framed target that is killed by the decoration, contained in the wild kernel, **abelian**, and of **exponent 2** — the shape of the chief kernels the cochain keeps quantify over.(Q2Presentation.Induction.delTargetQ2Presentation.Induction.delTarget {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (S : Submodule (ZMod 2) (Q2Presentation.Induction.towerM K)) (hS : ∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S) : Q2Presentation.BoundaryFramedTarget**The split-tower framed target**: `Y := W ⋊ C-child`, tame data and decoration pulled through `rightHom`; `H` and `E` are the `C`-child's on the nose.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorSSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K)hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S)) (hcover∀ (y : (Q2Presentation.Induction.delTarget chief K S hS).Y), ∃ c ∈ Subgroup.closure (Set.range (Q2Presentation.Induction.weakMarking (Q2Presentation.Induction.delBase chief K S hS Q2Presentation.boundaryPackage_GammaA ρ))), (Q2Presentation.Lifting.conjFamily E).op (y * c⁻¹) = 1: ∀ (y(Q2Presentation.Induction.delTarget chief K S hS).Y: (Q2Presentation.Induction.delTargetQ2Presentation.Induction.delTarget {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (S : Submodule (ZMod 2) (Q2Presentation.Induction.towerM K)) (hS : ∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S) : Q2Presentation.BoundaryFramedTarget**The split-tower framed target**: `Y := W ⋊ C-child`, tame data and decoration pulled through `rightHom`; `H` and `E` are the `C`-child's on the nose.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorSSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K)hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), ∃ c(Q2Presentation.Induction.delTarget chief K S hS).Y∈ Subgroup.closureSubgroup.closure.{u_1} {G : Type u_1} [Group G] (k : Set G) : Subgroup GThe `Subgroup` generated by a set.(Set.rangeSet.range.{u, u_1} {α : Type u} {ι : Sort u_1} (f : ι → α) : Set αRange of a function. This function is more flexible than `f '' univ`, as the image requires that the domain is in Type and not an arbitrary Sort.(Q2Presentation.Induction.weakMarkingQ2Presentation.Induction.weakMarking {Yt : Q2Presentation.BoundaryFramedTarget} (h : Q2Presentation.GammaA ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Q2Presentation.Marking Yt.Y**The hom-induced marking**: the generator values of a continuous hom out of the candidate. Every weak-base object of this file is spelled at THIS marking (one-spelling discipline; `liftMarking` is its framed-lift restriction).(Q2Presentation.Induction.delBaseQ2Presentation.Induction.delBase {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (S : Submodule (ZMod 2) (Q2Presentation.Induction.towerM K)) (hS : ∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (ρ : Q2Presentation.boundaryFramedSurj B (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd) : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of (Q2Presentation.Induction.delTarget chief K S hS).Y)**The split-tower base**: `γ ↦ inr (ρ γ)` (a continuous hom for every `ρ` — no obstruction, unlike the arithmetic `Y'/T'_χ`-tower).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorSSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K)hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ SQ2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.ρQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd))), (Q2Presentation.Lifting.conjFamilyQ2Presentation.Lifting.conjFamily {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Q2Presentation.Lifting.OperatorFamily Yt (Q2Presentation.Lifting.NAdd E)The concrete conjugation family of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.delTarget chief K S hS)).opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) V(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`.y(Q2Presentation.Induction.delTarget chief K S hS).Y*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`.c(Q2Presentation.Induction.delTarget chief K S hS).Y⁻¹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`.)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`.1) : Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Induction.weakZ1Q2Presentation.Induction.weakZ1 {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) {Γ : ProfiniteGrp.{0}} (h : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Type**The weak-base twisted-cocycle set** of an ARBITRARY continuous hom into the target, relative to an elementary kernel — the weak-base generalization of `TorsorProgram.Z1` (no surjectivity onto the quotient imposed; the basepoint is the hom itself). Carrier chosen to match the `EdgeTwistLocalCore` twist layer verbatim.EQ2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.delTarget chief K S hS)(Q2Presentation.Induction.delBaseQ2Presentation.Induction.delBase {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) (S : Submodule (ZMod 2) (Q2Presentation.Induction.towerM K)) (hS : ∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (ρ : Q2Presentation.boundaryFramedSurj B (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd) : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of (Q2Presentation.Induction.delTarget chief K S hS).Y)**The split-tower base**: `γ ↦ inr (ρ γ)` (a continuous hom for every `ρ` — no obstruction, unlike the arithmetic `Y'/T'_χ`-tower).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorSSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K)hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ SQ2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.ρQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd)) =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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.delTarget chief K S hS)) ^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`.2 *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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Lifting.conjInvDualsQ2Presentation.Lifting.conjInvDuals {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Submodule (ZMod 2) (Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E))The conjugation-invariant duals `X = (R^∨)^Y = (R^∨)^C` of an elementary kernel (consumer spelling of the manuscript's `𝒳_R`, §7 l.3720–3723).EQ2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.delTarget chief K S hS))**The generic candidate count at the split tower**: N6's ledger dictionary + corank engine, for ANY elementary kernel over `delTarget` with a marking-covering (`|Z¹| = |N|²·|𝒳|`, the `prop:defduality` instance shape).
-
theoremdefined in Q2Presentation/Induction/EdgeDelSurjDischarge.leancomplete
theorem Q2Presentation.Induction.edgeDelSurj_gammaA {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (ρQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd: Q2Presentation.boundaryFramedSurjQ2Presentation.boundaryFramedSurj {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (Yt : Q2Presentation.BoundaryFramedTarget) (F : Q2Presentation.BoundaryFrame Yt) : TypeThe **boundary-framed surjections** `e_Γ^β(𝒴)` (manuscript `eq:eGamma`): the continuous surjections `f : Γ ↠ Y` whose induced map to `H × E` is the prescribed `β ∘ b_Γ`, i.e. `q_Y ∘ f = β ∘ b_Γ`. This is the subtype counted in Theorem 4.2; its cardinality is `e_Γ^β(𝒴)`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.Induction.cChildQ2Presentation.Induction.cChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The C-child framed pair** (the carrier of `X_Γ(C)`; manuscript `C = Y/K` via `B/M' ≅ C`, `mChildCollapse`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.cChildQ2Presentation.Induction.cChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The C-child framed pair** (the carrier of `X_Γ(C)`; manuscript `C = Y/K` via `B/M' ≅ C`, `mChildCollapse`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.) : Q2Presentation.Induction.EdgeDelSurjQ2Presentation.Induction.EdgeDelSurj {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (ρ : Q2Presentation.boundaryFramedSurj B (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd) : Prop**F-∂ floor `Prop`** (design §5 #F-∂; `lem:elementarystage` l.4171–4205, dual-injectivity spelling): no `0 ≠ χ ∈ 𝒳_T` kills every constraint defect reading — i.e. the transpose of `∂_{Γ,ρ}` is injective. PROVENANCE + dissolution program: the manuscript proof is the counting dévissage `H²_{Γ,ρ}(M) = 0` at the intermediate `χ`-pushout kernels `M_χ = ker χ̃`; in-tree this is the clause-(d) ladder (`q2_localduality_weakZ1_card`) at `M_χ`-kernels for the LOCAL source — derivable, expected NOT to survive — and the N6 corank engine for the candidate (manuscript fallback per the §5 table). Consumed as a HYPOTHESIS (never an axiom) by the engine fire below; `edgeL_surjective_of_delSurj` converts it to the engine's `hL`.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorQ2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.ρQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).sndtheorem Q2Presentation.Induction.edgeDelSurj_gammaA {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (ρQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd: Q2Presentation.boundaryFramedSurjQ2Presentation.boundaryFramedSurj {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (Yt : Q2Presentation.BoundaryFramedTarget) (F : Q2Presentation.BoundaryFrame Yt) : TypeThe **boundary-framed surjections** `e_Γ^β(𝒴)` (manuscript `eq:eGamma`): the continuous surjections `f : Γ ↠ Y` whose induced map to `H × E` is the prescribed `β ∘ b_Γ`, i.e. `q_Y ∘ f = β ∘ b_Γ`. This is the subtype counted in Theorem 4.2; its cardinality is `e_Γ^β(𝒴)`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.Induction.cChildQ2Presentation.Induction.cChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The C-child framed pair** (the carrier of `X_Γ(C)`; manuscript `C = Y/K` via `B/M' ≅ C`, `mChildCollapse`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.cChildQ2Presentation.Induction.cChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The C-child framed pair** (the carrier of `X_Γ(C)`; manuscript `C = Y/K` via `B/M' ≅ C`, `mChildCollapse`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.) : Q2Presentation.Induction.EdgeDelSurjQ2Presentation.Induction.EdgeDelSurj {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (ρ : Q2Presentation.boundaryFramedSurj B (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd) : Prop**F-∂ floor `Prop`** (design §5 #F-∂; `lem:elementarystage` l.4171–4205, dual-injectivity spelling): no `0 ≠ χ ∈ 𝒳_T` kills every constraint defect reading — i.e. the transpose of `∂_{Γ,ρ}` is injective. PROVENANCE + dissolution program: the manuscript proof is the counting dévissage `H²_{Γ,ρ}(M) = 0` at the intermediate `χ`-pushout kernels `M_χ = ker χ̃`; in-tree this is the clause-(d) ladder (`q2_localduality_weakZ1_card`) at `M_χ`-kernels for the LOCAL source — derivable, expected NOT to survive — and the N6 corank engine for the candidate (manuscript fallback per the §5 table). Consumed as a HYPOTHESIS (never an axiom) by the engine fire below; `edgeL_surjective_of_delSurj` converts it to the engine's `hL`.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactorQ2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.ρQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst (Q2Presentation.Induction.cChild chief K).snd**`edgeDelSurj_gammaA` — the CANDIDATE ∂-floor discharge** (design §5 F-∂, candidate row): the same dévissage with all three counts through N6's ledger corank engine (`prop:defduality` instances at the `ker χ̃`-kernels).
-
theoremdefined in Q2Presentation/Induction/XRBocksteinKeep.leancomplete
theorem Q2Presentation.Induction.sec7_xr_bockstein_witness {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (hR1 < Nat.card ↥(Q2Presentation.Induction.kernelFrattini K): 1 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.kernelFrattiniQ2Presentation.Induction.kernelFrattini {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : Subgroup p.fst.YThe literal Frattini subgroup `R = Φ(K)` of the kernel, as a subgroup of `Y` (the manuscript's `R`, l.3626).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) (hchar¬∃ lam, lam ≠ 0 ∧ ∀ (c : (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C), lam ∘ₗ ↑((Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawActionData.actR c) = lam: ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.∃ lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R, lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0 ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).∀ (c(Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C: (Q2Presentation.Induction.sec7RawTowerPacketCanonicalQ2Presentation.Induction.sec7RawTowerPacketCanonical {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.Sec7RawTowerPacket chief KThe canonical raw tower packet — the literal §7 constructors (checkpoint-F9). Using this definitional packet (instead of an opaque `Nonempty`-obtained one) lets the crux-lowered pushout packet of `Section7PushoutConstruction` be consumed directly.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).rawModuleDataQ2Presentation.Induction.Sec7RawTowerPacket.rawModuleData {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} (self : Q2Presentation.Induction.Sec7RawTowerPacket chief K) : Q2Presentation.Induction.MinimalBlockRawModuleData p chief.toNonScalarChiefFactor.CQ2Presentation.Induction.MinimalBlockRawModuleData.C {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (self : Q2Presentation.Induction.MinimalBlockRawModuleData p chief) : Type), lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R∘ₗLinearMap.comp.{u_2, u_3, u_4, u_9, u_10, u_11} {R₁ : Type u_2} {R₂ : Type u_3} {R₃ : Type u_4} {M₁ : Type u_9} {M₂ : Type u_10} {M₃ : Type u_11} [Semiring R₁] [Semiring R₂] [Semiring R₃] [AddCommMonoid M₁] [AddCommMonoid M₂] [AddCommMonoid M₃] {module_M₁ : Module R₁ M₁} {module_M₂ : Module R₂ M₂} {module_M₃ : Module R₃ M₃} {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] (f : M₂ →ₛₗ[σ₂₃] M₃) (g : M₁ →ₛₗ[σ₁₂] M₂) : M₁ →ₛₗ[σ₁₃] M₃Composition of two linear maps is a linear map↑((Q2Presentation.Induction.sec7RawTowerPacketCanonicalQ2Presentation.Induction.sec7RawTowerPacketCanonical {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.Sec7RawTowerPacket chief KThe canonical raw tower packet — the literal §7 constructors (checkpoint-F9). Using this definitional packet (instead of an opaque `Nonempty`-obtained one) lets the crux-lowered pushout packet of `Section7PushoutConstruction` be consumed directly.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).rawActionDataQ2Presentation.Induction.Sec7RawTowerPacket.rawActionData {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} (self : Q2Presentation.Induction.Sec7RawTowerPacket chief K) : Q2Presentation.Induction.MinimalBlockRawActionData self.rawModuleData.actRQ2Presentation.Induction.MinimalBlockRawActionData.actR {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} {D : Q2Presentation.Induction.MinimalBlockRawModuleData p chief} (self : Q2Presentation.Induction.MinimalBlockRawActionData D) : D.C →* D.R ≃ₗ[ZMod 2] D.Rc(Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C) =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`.lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R) (gQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.TorsorProgram.quotientFramedTarget p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯ p.snd): Q2Presentation.boundaryFramedSurjQ2Presentation.boundaryFramedSurj {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (Yt : Q2Presentation.BoundaryFramedTarget) (F : Q2Presentation.BoundaryFrame Yt) : TypeThe **boundary-framed surjections** `e_Γ^β(𝒴)` (manuscript `eq:eGamma`): the continuous surjections `f : Γ ↠ Y` whose induced map to `H × E` is the prescribed `β ∘ b_Γ`, i.e. `q_Y ∘ f = β ∘ b_Γ`. This is the subtype counted in Theorem 4.2; its cardinality is `e_Γ^β(𝒴)`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.TorsorProgram.quotientFramedTargetQ2Presentation.TorsorProgram.quotientFramedTarget (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) : Q2Presentation.BoundaryFramedTarget**The quotient framed target** `Y/N` (same `H`, same `E`, image wild kernel).pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrameQ2Presentation.TorsorProgram.quotientFrame (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) (F : Q2Presentation.BoundaryFrame Yt) : Q2Presentation.BoundaryFrame (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ)The frame transports verbatim (`H`, `E`, `α`, `ψ`, `β` unchanged).pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ pQ2Presentation.Induction.FramedPair.sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.)) (qQ2Presentation.Marking p.fst.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (hlift∀ (a : Q2Presentation.Gen), (QuotientGroup.mk' (Q2Presentation.Induction.xrKernel chief K).N) (q a) = (ProfiniteGrp.Hom.hom (↑g).hom) (Q2Presentation.gammaGen a): ∀ (aQ2Presentation.Gen: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.), (QuotientGroup.mk'QuotientGroup.mk'.{u_1} {G : Type u_1} [Group G] (N : Subgroup G) [nN : N.Normal] : G →* G ⧸ NThe group homomorphism from `G` to `G/N`.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y) (qQ2Presentation.Marking p.fst.YaQ2Presentation.Gen) =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`.(ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.(↑gQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.TorsorProgram.quotientFramedTarget p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯ p.snd)).homQ2Presentation.Profinite.SurjContHom.hom.{u} {P Q : ProfiniteGrp.{u}} (self : Q2Presentation.Profinite.SurjContHom P Q) : P ⟶ QThe underlying morphism of profinite groups.) (Q2Presentation.gammaGenQ2Presentation.gammaGen (a : Q2Presentation.Gen) : ↑Q2Presentation.GammaA.toProfinite.toTopThe four universal generators `σ, τ, x₀, x₁` of `Γ_A`, as the compatible families of marked generators.aQ2Presentation.Gen)) (hframe∀ (a : Q2Presentation.Gen), p.fst.qYMap (q a) = (ProfiniteGrp.Hom.hom p.snd.beta) ((ProfiniteGrp.Hom.hom Q2Presentation.boundaryPackage_GammaA.toBoundary) (Q2Presentation.gammaGen a)): ∀ (aQ2Presentation.Gen: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.), pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..qYMapQ2Presentation.BoundaryFramedTarget.qYMap (Yt : Q2Presentation.BoundaryFramedTarget) : Yt.Y →* Yt.H × Multiplicative Yt.EThe combined map `q_Y = (π_Y, θ_Y) : Y →* H × Multiplicative E` of manuscript Definition 4.1: the data the boundary-framed count holds fixed.(qQ2Presentation.Marking p.fst.YaQ2Presentation.Gen) =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`.(ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.pQ2Presentation.Induction.FramedPair.sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component..betaQ2Presentation.BoundaryFrame.beta {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.BoundaryFrame Yt) : Q2Presentation.Boundary ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of (Yt.H × Multiplicative Yt.E))The induced boundary map `β : ∂_bd → H × Multiplicative E`.) ((ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor..toBoundaryQ2Presentation.BoundaryPackage.toBoundary {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) : Γ ⟶ Q2Presentation.Boundary**The boundary map** `b_Γ : Γ ⟶ ∂_bd` (manuscript `eq:boundarymap`), the universal map into the fibre product induced by the compatible pair `(tameMap, pro2Map)`.) (Q2Presentation.gammaGenQ2Presentation.gammaGen (a : Q2Presentation.Gen) : ↑Q2Presentation.GammaA.toProfinite.toTopThe four universal generators `σ, τ, x₀, x₁` of `Γ_A`, as the compatible families of marked generators.aQ2Presentation.Gen))) (WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)): SubmoduleSubmodule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vA submodule of a module is one which is closed under vector operations. This is a sufficient condition for the subset of vectors in the submodule to themselves form a module.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor))) (hWst∀ (y : p.fst.Y), ∀ m ∈ W, ((Q2Presentation.Lifting.conjFamily (Q2Presentation.Induction.xrKernel chief K)).op y) m ∈ W: ∀ (yp.fst.Y: pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), ∀ mQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)∈ WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)), ((Q2Presentation.Lifting.conjFamilyQ2Presentation.Lifting.conjFamily {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Q2Presentation.Lifting.OperatorFamily Yt (Q2Presentation.Lifting.NAdd E)The concrete conjugation family of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)).opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) Vyp.fst.Y) mQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))) (wQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K): Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) (hwfix∀ (y : p.fst.Y), ((Q2Presentation.Lifting.conjFamily (Q2Presentation.Induction.xrKernel chief K)).op y) w - w ∈ W: ∀ (yp.fst.Y: pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), ((Q2Presentation.Lifting.conjFamilyQ2Presentation.Lifting.conjFamily {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Q2Presentation.Lifting.OperatorFamily Yt (Q2Presentation.Lifting.NAdd E)The concrete conjugation family of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)).opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) Vyp.fst.Y) wQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)-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).wQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))) (hwWw ∉ W: wQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)∉ WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))) : ∃ nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K), Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.(Q2Presentation.Lifting.conjFamilyQ2Presentation.Lifting.conjFamily {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Q2Presentation.Lifting.OperatorFamily Yt (Q2Presentation.Lifting.NAdd E)The concrete conjugation family of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)).opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking p.fst.YnQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)Q2Presentation.Q2Word.tameRelatorQ2Presentation.Q2Word.tameRelator : Q2Presentation.GExprThe tame relator `τ^σ · (τ²)⁻¹` (the relation `τ^σ = τ²`).-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).wQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.(Q2Presentation.Lifting.conjFamilyQ2Presentation.Lifting.conjFamily {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Q2Presentation.Lifting.OperatorFamily Yt (Q2Presentation.Lifting.NAdd E)The concrete conjugation family of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)).opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking p.fst.YnQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)Q2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`).∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))theorem Q2Presentation.Induction.sec7_xr_bockstein_witness {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (hR1 < Nat.card ↥(Q2Presentation.Induction.kernelFrattini K): 1 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.kernelFrattiniQ2Presentation.Induction.kernelFrattini {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : Subgroup p.fst.YThe literal Frattini subgroup `R = Φ(K)` of the kernel, as a subgroup of `Y` (the manuscript's `R`, l.3626).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) (hchar¬∃ lam, lam ≠ 0 ∧ ∀ (c : (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C), lam ∘ₗ ↑((Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawActionData.actR c) = lam: ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.∃ lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R, lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0 ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).∀ (c(Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C: (Q2Presentation.Induction.sec7RawTowerPacketCanonicalQ2Presentation.Induction.sec7RawTowerPacketCanonical {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.Sec7RawTowerPacket chief KThe canonical raw tower packet — the literal §7 constructors (checkpoint-F9). Using this definitional packet (instead of an opaque `Nonempty`-obtained one) lets the crux-lowered pushout packet of `Section7PushoutConstruction` be consumed directly.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).rawModuleDataQ2Presentation.Induction.Sec7RawTowerPacket.rawModuleData {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} (self : Q2Presentation.Induction.Sec7RawTowerPacket chief K) : Q2Presentation.Induction.MinimalBlockRawModuleData p chief.toNonScalarChiefFactor.CQ2Presentation.Induction.MinimalBlockRawModuleData.C {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (self : Q2Presentation.Induction.MinimalBlockRawModuleData p chief) : Type), lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R∘ₗLinearMap.comp.{u_2, u_3, u_4, u_9, u_10, u_11} {R₁ : Type u_2} {R₂ : Type u_3} {R₃ : Type u_4} {M₁ : Type u_9} {M₂ : Type u_10} {M₃ : Type u_11} [Semiring R₁] [Semiring R₂] [Semiring R₃] [AddCommMonoid M₁] [AddCommMonoid M₂] [AddCommMonoid M₃] {module_M₁ : Module R₁ M₁} {module_M₂ : Module R₂ M₂} {module_M₃ : Module R₃ M₃} {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] (f : M₂ →ₛₗ[σ₂₃] M₃) (g : M₁ →ₛₗ[σ₁₂] M₂) : M₁ →ₛₗ[σ₁₃] M₃Composition of two linear maps is a linear map↑((Q2Presentation.Induction.sec7RawTowerPacketCanonicalQ2Presentation.Induction.sec7RawTowerPacketCanonical {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.Sec7RawTowerPacket chief KThe canonical raw tower packet — the literal §7 constructors (checkpoint-F9). Using this definitional packet (instead of an opaque `Nonempty`-obtained one) lets the crux-lowered pushout packet of `Section7PushoutConstruction` be consumed directly.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).rawActionDataQ2Presentation.Induction.Sec7RawTowerPacket.rawActionData {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} (self : Q2Presentation.Induction.Sec7RawTowerPacket chief K) : Q2Presentation.Induction.MinimalBlockRawActionData self.rawModuleData.actRQ2Presentation.Induction.MinimalBlockRawActionData.actR {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} {D : Q2Presentation.Induction.MinimalBlockRawModuleData p chief} (self : Q2Presentation.Induction.MinimalBlockRawActionData D) : D.C →* D.R ≃ₗ[ZMod 2] D.Rc(Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C) =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`.lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R) (gQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.TorsorProgram.quotientFramedTarget p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯ p.snd): Q2Presentation.boundaryFramedSurjQ2Presentation.boundaryFramedSurj {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (Yt : Q2Presentation.BoundaryFramedTarget) (F : Q2Presentation.BoundaryFrame Yt) : TypeThe **boundary-framed surjections** `e_Γ^β(𝒴)` (manuscript `eq:eGamma`): the continuous surjections `f : Γ ↠ Y` whose induced map to `H × E` is the prescribed `β ∘ b_Γ`, i.e. `q_Y ∘ f = β ∘ b_Γ`. This is the subtype counted in Theorem 4.2; its cardinality is `e_Γ^β(𝒴)`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.TorsorProgram.quotientFramedTargetQ2Presentation.TorsorProgram.quotientFramedTarget (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) : Q2Presentation.BoundaryFramedTarget**The quotient framed target** `Y/N` (same `H`, same `E`, image wild kernel).pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrameQ2Presentation.TorsorProgram.quotientFrame (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) (F : Q2Presentation.BoundaryFrame Yt) : Q2Presentation.BoundaryFrame (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ)The frame transports verbatim (`H`, `E`, `α`, `ψ`, `β` unchanged).pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ pQ2Presentation.Induction.FramedPair.sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.)) (qQ2Presentation.Marking p.fst.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (hlift∀ (a : Q2Presentation.Gen), (QuotientGroup.mk' (Q2Presentation.Induction.xrKernel chief K).N) (q a) = (ProfiniteGrp.Hom.hom (↑g).hom) (Q2Presentation.gammaGen a): ∀ (aQ2Presentation.Gen: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.), (QuotientGroup.mk'QuotientGroup.mk'.{u_1} {G : Type u_1} [Group G] (N : Subgroup G) [nN : N.Normal] : G →* G ⧸ NThe group homomorphism from `G` to `G/N`.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y) (qQ2Presentation.Marking p.fst.YaQ2Presentation.Gen) =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`.(ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.(↑gQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.TorsorProgram.quotientFramedTarget p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯ p.snd)).homQ2Presentation.Profinite.SurjContHom.hom.{u} {P Q : ProfiniteGrp.{u}} (self : Q2Presentation.Profinite.SurjContHom P Q) : P ⟶ QThe underlying morphism of profinite groups.) (Q2Presentation.gammaGenQ2Presentation.gammaGen (a : Q2Presentation.Gen) : ↑Q2Presentation.GammaA.toProfinite.toTopThe four universal generators `σ, τ, x₀, x₁` of `Γ_A`, as the compatible families of marked generators.aQ2Presentation.Gen)) (hframe∀ (a : Q2Presentation.Gen), p.fst.qYMap (q a) = (ProfiniteGrp.Hom.hom p.snd.beta) ((ProfiniteGrp.Hom.hom Q2Presentation.boundaryPackage_GammaA.toBoundary) (Q2Presentation.gammaGen a)): ∀ (aQ2Presentation.Gen: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.), pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..qYMapQ2Presentation.BoundaryFramedTarget.qYMap (Yt : Q2Presentation.BoundaryFramedTarget) : Yt.Y →* Yt.H × Multiplicative Yt.EThe combined map `q_Y = (π_Y, θ_Y) : Y →* H × Multiplicative E` of manuscript Definition 4.1: the data the boundary-framed count holds fixed.(qQ2Presentation.Marking p.fst.YaQ2Presentation.Gen) =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`.(ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.pQ2Presentation.Induction.FramedPair.sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component..betaQ2Presentation.BoundaryFrame.beta {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.BoundaryFrame Yt) : Q2Presentation.Boundary ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of (Yt.H × Multiplicative Yt.E))The induced boundary map `β : ∂_bd → H × Multiplicative E`.) ((ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor..toBoundaryQ2Presentation.BoundaryPackage.toBoundary {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) : Γ ⟶ Q2Presentation.Boundary**The boundary map** `b_Γ : Γ ⟶ ∂_bd` (manuscript `eq:boundarymap`), the universal map into the fibre product induced by the compatible pair `(tameMap, pro2Map)`.) (Q2Presentation.gammaGenQ2Presentation.gammaGen (a : Q2Presentation.Gen) : ↑Q2Presentation.GammaA.toProfinite.toTopThe four universal generators `σ, τ, x₀, x₁` of `Γ_A`, as the compatible families of marked generators.aQ2Presentation.Gen))) (WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)): SubmoduleSubmodule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] [Module R M] : Type vA submodule of a module is one which is closed under vector operations. This is a sufficient condition for the subset of vectors in the submodule to themselves form a module.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor))) (hWst∀ (y : p.fst.Y), ∀ m ∈ W, ((Q2Presentation.Lifting.conjFamily (Q2Presentation.Induction.xrKernel chief K)).op y) m ∈ W: ∀ (yp.fst.Y: pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), ∀ mQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)∈ WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)), ((Q2Presentation.Lifting.conjFamilyQ2Presentation.Lifting.conjFamily {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Q2Presentation.Lifting.OperatorFamily Yt (Q2Presentation.Lifting.NAdd E)The concrete conjugation family of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)).opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) Vyp.fst.Y) mQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))) (wQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K): Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) (hwfix∀ (y : p.fst.Y), ((Q2Presentation.Lifting.conjFamily (Q2Presentation.Induction.xrKernel chief K)).op y) w - w ∈ W: ∀ (yp.fst.Y: pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), ((Q2Presentation.Lifting.conjFamilyQ2Presentation.Lifting.conjFamily {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Q2Presentation.Lifting.OperatorFamily Yt (Q2Presentation.Lifting.NAdd E)The concrete conjugation family of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)).opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) Vyp.fst.Y) wQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)-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).wQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))) (hwWw ∉ W: wQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)∉ WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))) : ∃ nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K), Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.(Q2Presentation.Lifting.conjFamilyQ2Presentation.Lifting.conjFamily {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Q2Presentation.Lifting.OperatorFamily Yt (Q2Presentation.Lifting.NAdd E)The concrete conjugation family of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)).opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking p.fst.YnQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)Q2Presentation.Q2Word.tameRelatorQ2Presentation.Q2Word.tameRelator : Q2Presentation.GExprThe tame relator `τ^σ · (τ²)⁻¹` (the relation `τ^σ = τ²`).-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).wQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).Q2Presentation.Lifting.foxShadowGenQ2Presentation.Lifting.foxShadowGen {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (Φ : Yt.Y → Module.End (ZMod 2) V) (q : Q2Presentation.Marking Yt.Y) (n : Q2Presentation.Gen → V) : Q2Presentation.GExpr → VThe shadow recursion over an abstract operator family.(Q2Presentation.Lifting.conjFamilyQ2Presentation.Lifting.conjFamily {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Q2Presentation.Lifting.OperatorFamily Yt (Q2Presentation.Lifting.NAdd E)The concrete conjugation family of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)).opQ2Presentation.Lifting.OperatorFamily.op {Yt : Q2Presentation.BoundaryFramedTarget} {V : Type} [AddCommGroup V] [Module (ZMod 2) V] (self : Q2Presentation.Lifting.OperatorFamily Yt V) : Yt.Y → Module.End (ZMod 2) VqQ2Presentation.Marking p.fst.YnQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)Q2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`).∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.WSubmodule (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))**The Bockstein witness, PROVEN** (`prop:defduality`, the full dévissage: marked fullness, the (♦)-induction, and the mixed-Hessian faithfulness at the simple sections): in the `𝒳_R = 0` branch, every relatively fixed vector outside a stable floor admits an ambient tuple whose rows are `(w, 0)` modulo the floor — indeed on the nose.
-
theoremdefined in Q2Presentation/Induction/XRLayerKeep.leancomplete
theorem Q2Presentation.Induction.sec7_xr_layer_data {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (hR1 < Nat.card ↥(Q2Presentation.Induction.kernelFrattini K): 1 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.kernelFrattiniQ2Presentation.Induction.kernelFrattini {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : Subgroup p.fst.YThe literal Frattini subgroup `R = Φ(K)` of the kernel, as a subgroup of `Y` (the manuscript's `R`, l.3626).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) (hchar¬∃ lam, lam ≠ 0 ∧ ∀ (c : (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C), lam ∘ₗ ↑((Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawActionData.actR c) = lam: ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.∃ lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R, lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0 ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).∀ (c(Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C: (Q2Presentation.Induction.sec7RawTowerPacketCanonicalQ2Presentation.Induction.sec7RawTowerPacketCanonical {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.Sec7RawTowerPacket chief KThe canonical raw tower packet — the literal §7 constructors (checkpoint-F9). Using this definitional packet (instead of an opaque `Nonempty`-obtained one) lets the crux-lowered pushout packet of `Section7PushoutConstruction` be consumed directly.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).rawModuleDataQ2Presentation.Induction.Sec7RawTowerPacket.rawModuleData {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} (self : Q2Presentation.Induction.Sec7RawTowerPacket chief K) : Q2Presentation.Induction.MinimalBlockRawModuleData p chief.toNonScalarChiefFactor.CQ2Presentation.Induction.MinimalBlockRawModuleData.C {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (self : Q2Presentation.Induction.MinimalBlockRawModuleData p chief) : Type), lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R∘ₗLinearMap.comp.{u_2, u_3, u_4, u_9, u_10, u_11} {R₁ : Type u_2} {R₂ : Type u_3} {R₃ : Type u_4} {M₁ : Type u_9} {M₂ : Type u_10} {M₃ : Type u_11} [Semiring R₁] [Semiring R₂] [Semiring R₃] [AddCommMonoid M₁] [AddCommMonoid M₂] [AddCommMonoid M₃] {module_M₁ : Module R₁ M₁} {module_M₂ : Module R₂ M₂} {module_M₃ : Module R₃ M₃} {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] (f : M₂ →ₛₗ[σ₂₃] M₃) (g : M₁ →ₛₗ[σ₁₂] M₂) : M₁ →ₛₗ[σ₁₃] M₃Composition of two linear maps is a linear map↑((Q2Presentation.Induction.sec7RawTowerPacketCanonicalQ2Presentation.Induction.sec7RawTowerPacketCanonical {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.Sec7RawTowerPacket chief KThe canonical raw tower packet — the literal §7 constructors (checkpoint-F9). Using this definitional packet (instead of an opaque `Nonempty`-obtained one) lets the crux-lowered pushout packet of `Section7PushoutConstruction` be consumed directly.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).rawActionDataQ2Presentation.Induction.Sec7RawTowerPacket.rawActionData {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} (self : Q2Presentation.Induction.Sec7RawTowerPacket chief K) : Q2Presentation.Induction.MinimalBlockRawActionData self.rawModuleData.actRQ2Presentation.Induction.MinimalBlockRawActionData.actR {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} {D : Q2Presentation.Induction.MinimalBlockRawModuleData p chief} (self : Q2Presentation.Induction.MinimalBlockRawActionData D) : D.C →* D.R ≃ₗ[ZMod 2] D.Rc(Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C) =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`.lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R) : (∀ (gQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.TorsorProgram.quotientFramedTarget p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯ p.snd): Q2Presentation.boundaryFramedSurjQ2Presentation.boundaryFramedSurj {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (Yt : Q2Presentation.BoundaryFramedTarget) (F : Q2Presentation.BoundaryFrame Yt) : TypeThe **boundary-framed surjections** `e_Γ^β(𝒴)` (manuscript `eq:eGamma`): the continuous surjections `f : Γ ↠ Y` whose induced map to `H × E` is the prescribed `β ∘ b_Γ`, i.e. `q_Y ∘ f = β ∘ b_Γ`. This is the subtype counted in Theorem 4.2; its cardinality is `e_Γ^β(𝒴)`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.TorsorProgram.quotientFramedTargetQ2Presentation.TorsorProgram.quotientFramedTarget (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) : Q2Presentation.BoundaryFramedTarget**The quotient framed target** `Y/N` (same `H`, same `E`, image wild kernel).pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrameQ2Presentation.TorsorProgram.quotientFrame (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) (F : Q2Presentation.BoundaryFrame Yt) : Q2Presentation.BoundaryFrame (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ)The frame transports verbatim (`H`, `E`, `α`, `ψ`, `β` unchanged).pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ pQ2Presentation.Induction.FramedPair.sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.)) (qQ2Presentation.Marking p.fst.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), (∀ (aQ2Presentation.Gen: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.), (QuotientGroup.mk'QuotientGroup.mk'.{u_1} {G : Type u_1} [Group G] (N : Subgroup G) [nN : N.Normal] : G →* G ⧸ NThe group homomorphism from `G` to `G/N`.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y) (qQ2Presentation.Marking p.fst.YaQ2Presentation.Gen) =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`.(ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.(↑gQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.TorsorProgram.quotientFramedTarget p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯ p.snd)).homQ2Presentation.Profinite.SurjContHom.hom.{u} {P Q : ProfiniteGrp.{u}} (self : Q2Presentation.Profinite.SurjContHom P Q) : P ⟶ QThe underlying morphism of profinite groups.) (Q2Presentation.gammaGenQ2Presentation.gammaGen (a : Q2Presentation.Gen) : ↑Q2Presentation.GammaA.toProfinite.toTopThe four universal generators `σ, τ, x₀, x₁` of `Γ_A`, as the compatible families of marked generators.aQ2Presentation.Gen)) → (∀ (aQ2Presentation.Gen: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.), pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..qYMapQ2Presentation.BoundaryFramedTarget.qYMap (Yt : Q2Presentation.BoundaryFramedTarget) : Yt.Y →* Yt.H × Multiplicative Yt.EThe combined map `q_Y = (π_Y, θ_Y) : Y →* H × Multiplicative E` of manuscript Definition 4.1: the data the boundary-framed count holds fixed.(qQ2Presentation.Marking p.fst.YaQ2Presentation.Gen) =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`.(ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.pQ2Presentation.Induction.FramedPair.sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component..betaQ2Presentation.BoundaryFrame.beta {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.BoundaryFrame Yt) : Q2Presentation.Boundary ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of (Yt.H × Multiplicative Yt.E))The induced boundary map `β : ∂_bd → H × Multiplicative E`.) ((ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor..toBoundaryQ2Presentation.BoundaryPackage.toBoundary {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) : Γ ⟶ Q2Presentation.Boundary**The boundary map** `b_Γ : Γ ⟶ ∂_bd` (manuscript `eq:boundarymap`), the universal map into the fibre product induced by the compatible pair `(tameMap, pro2Map)`.) (Q2Presentation.gammaGenQ2Presentation.gammaGen (a : Q2Presentation.Gen) : ↑Q2Presentation.GammaA.toProfinite.toTopThe four universal generators `σ, τ, x₀, x₁` of `Γ_A`, as the compatible families of marked generators.aQ2Presentation.Gen))) → Function.SurjectiveFunction.Surjective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called surjective if every `b : β` is equal to `f a` for some `a : α`.⇑(Q2Presentation.Lifting.rowMapQ2Presentation.Lifting.rowMap {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) [Finite Yt.Y] (q : Q2Presentation.Marking Yt.Y) : (Q2Presentation.Gen → Q2Presentation.Lifting.NAdd E) →ₗ[ZMod 2] Q2Presentation.Lifting.NAdd E × Q2Presentation.Lifting.NAdd E**The row map**: both relator shadows, as one linear map.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) qQ2Presentation.Marking p.fst.Y)) ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).∀ (fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)): Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor))), (∀ (yp.fst.Y: pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (mQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K): Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)), fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))((Q2Presentation.Lifting.conjEndNQ2Presentation.Lifting.conjEndN {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) (y : Yt.Y) : Module.End (ZMod 2) (Q2Presentation.Lifting.NAdd E)Right conjugation by `y` as an `F₂`-linear endomorphism of `N`.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) yp.fst.Y) mQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief 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`.fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))mQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)) → fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief 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 Q2Presentation.Induction.sec7_xr_layer_data {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (hR1 < Nat.card ↥(Q2Presentation.Induction.kernelFrattini K): 1 <LT.lt.{u} {α : Type u} [self : LT α] : α → α → PropThe less-than relation: `x < y` Conventions for notations in identifiers: * The recommended spelling of `<` in identifiers is `lt`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.kernelFrattiniQ2Presentation.Induction.kernelFrattini {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (K : Q2Presentation.Induction.KernelMinimal chief) : Subgroup p.fst.YThe literal Frattini subgroup `R = Φ(K)` of the kernel, as a subgroup of `Y` (the manuscript's `R`, l.3626).KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) (hchar¬∃ lam, lam ≠ 0 ∧ ∀ (c : (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C), lam ∘ₗ ↑((Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawActionData.actR c) = lam: ¬Not (a : Prop) : Prop`Not p`, or `¬p`, is the negation of `p`. It is defined to be `p → False`, so if your goal is `¬p` you can use `intro h` to turn the goal into `h : p ⊢ False`, and if you have `hn : ¬p` and `h : p` then `hn h : False` and `(hn h).elim` will prove anything. For more information: [Propositional Logic](https://lean-lang.org/theorem_proving_in_lean4/propositions_and_proofs.html#propositional-logic) Conventions for notations in identifiers: * The recommended spelling of `¬` in identifiers is `not`.∃ lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R, lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0 ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).∀ (c(Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C: (Q2Presentation.Induction.sec7RawTowerPacketCanonicalQ2Presentation.Induction.sec7RawTowerPacketCanonical {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.Sec7RawTowerPacket chief KThe canonical raw tower packet — the literal §7 constructors (checkpoint-F9). Using this definitional packet (instead of an opaque `Nonempty`-obtained one) lets the crux-lowered pushout packet of `Section7PushoutConstruction` be consumed directly.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).rawModuleDataQ2Presentation.Induction.Sec7RawTowerPacket.rawModuleData {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} (self : Q2Presentation.Induction.Sec7RawTowerPacket chief K) : Q2Presentation.Induction.MinimalBlockRawModuleData p chief.toNonScalarChiefFactor.CQ2Presentation.Induction.MinimalBlockRawModuleData.C {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} (self : Q2Presentation.Induction.MinimalBlockRawModuleData p chief) : Type), lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R∘ₗLinearMap.comp.{u_2, u_3, u_4, u_9, u_10, u_11} {R₁ : Type u_2} {R₂ : Type u_3} {R₃ : Type u_4} {M₁ : Type u_9} {M₂ : Type u_10} {M₃ : Type u_11} [Semiring R₁] [Semiring R₂] [Semiring R₃] [AddCommMonoid M₁] [AddCommMonoid M₂] [AddCommMonoid M₃] {module_M₁ : Module R₁ M₁} {module_M₂ : Module R₂ M₂} {module_M₃ : Module R₃ M₃} {σ₁₂ : R₁ →+* R₂} {σ₂₃ : R₂ →+* R₃} {σ₁₃ : R₁ →+* R₃} [RingHomCompTriple σ₁₂ σ₂₃ σ₁₃] (f : M₂ →ₛₗ[σ₂₃] M₃) (g : M₁ →ₛₗ[σ₁₂] M₂) : M₁ →ₛₗ[σ₁₃] M₃Composition of two linear maps is a linear map↑((Q2Presentation.Induction.sec7RawTowerPacketCanonicalQ2Presentation.Induction.sec7RawTowerPacketCanonical {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.Sec7RawTowerPacket chief KThe canonical raw tower packet — the literal §7 constructors (checkpoint-F9). Using this definitional packet (instead of an opaque `Nonempty`-obtained one) lets the crux-lowered pushout packet of `Section7PushoutConstruction` be consumed directly.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).rawActionDataQ2Presentation.Induction.Sec7RawTowerPacket.rawActionData {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p} {K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor} (self : Q2Presentation.Induction.Sec7RawTowerPacket chief K) : Q2Presentation.Induction.MinimalBlockRawActionData self.rawModuleData.actRQ2Presentation.Induction.MinimalBlockRawActionData.actR {p : Q2Presentation.Induction.FramedPair} {chief : Q2Presentation.Induction.NonScalarChiefFactor p} {D : Q2Presentation.Induction.MinimalBlockRawModuleData p chief} (self : Q2Presentation.Induction.MinimalBlockRawActionData D) : D.C →* D.R ≃ₗ[ZMod 2] D.Rc(Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.C) =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`.lamModule.Dual (ZMod 2) (Q2Presentation.Induction.sec7RawTowerPacketCanonical chief K).rawModuleData.R) : (∀ (gQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.TorsorProgram.quotientFramedTarget p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯ p.snd): Q2Presentation.boundaryFramedSurjQ2Presentation.boundaryFramedSurj {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (Yt : Q2Presentation.BoundaryFramedTarget) (F : Q2Presentation.BoundaryFrame Yt) : TypeThe **boundary-framed surjections** `e_Γ^β(𝒴)` (manuscript `eq:eGamma`): the continuous surjections `f : Γ ↠ Y` whose induced map to `H × E` is the prescribed `β ∘ b_Γ`, i.e. `q_Y ∘ f = β ∘ b_Γ`. This is the subtype counted in Theorem 4.2; its cardinality is `e_Γ^β(𝒴)`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.TorsorProgram.quotientFramedTargetQ2Presentation.TorsorProgram.quotientFramedTarget (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) : Q2Presentation.BoundaryFramedTarget**The quotient framed target** `Y/N` (same `H`, same `E`, image wild kernel).pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrameQ2Presentation.TorsorProgram.quotientFrame (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) (F : Q2Presentation.BoundaryFrame Yt) : Q2Presentation.BoundaryFrame (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ)The frame transports verbatim (`H`, `E`, `α`, `ψ`, `β` unchanged).pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ pQ2Presentation.Induction.FramedPair.sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.)) (qQ2Presentation.Marking p.fst.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.), (∀ (aQ2Presentation.Gen: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.), (QuotientGroup.mk'QuotientGroup.mk'.{u_1} {G : Type u_1} [Group G] (N : Subgroup G) [nN : N.Normal] : G →* G ⧸ NThe group homomorphism from `G` to `G/N`.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y) (qQ2Presentation.Marking p.fst.YaQ2Presentation.Gen) =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`.(ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.(↑gQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.TorsorProgram.quotientFramedTarget p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame p.fst (Q2Presentation.Induction.xrKernel chief K).N ⋯ ⋯ p.snd)).homQ2Presentation.Profinite.SurjContHom.hom.{u} {P Q : ProfiniteGrp.{u}} (self : Q2Presentation.Profinite.SurjContHom P Q) : P ⟶ QThe underlying morphism of profinite groups.) (Q2Presentation.gammaGenQ2Presentation.gammaGen (a : Q2Presentation.Gen) : ↑Q2Presentation.GammaA.toProfinite.toTopThe four universal generators `σ, τ, x₀, x₁` of `Γ_A`, as the compatible families of marked generators.aQ2Presentation.Gen)) → (∀ (aQ2Presentation.Gen: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.), pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..qYMapQ2Presentation.BoundaryFramedTarget.qYMap (Yt : Q2Presentation.BoundaryFramedTarget) : Yt.Y →* Yt.H × Multiplicative Yt.EThe combined map `q_Y = (π_Y, θ_Y) : Y →* H × Multiplicative E` of manuscript Definition 4.1: the data the boundary-framed count holds fixed.(qQ2Presentation.Marking p.fst.YaQ2Presentation.Gen) =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`.(ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.pQ2Presentation.Induction.FramedPair.sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component..betaQ2Presentation.BoundaryFrame.beta {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.BoundaryFrame Yt) : Q2Presentation.Boundary ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of (Yt.H × Multiplicative Yt.E))The induced boundary map `β : ∂_bd → H × Multiplicative E`.) ((ProfiniteGrp.Hom.homProfiniteGrp.Hom.hom.{u} {M N : ProfiniteGrp.{u}} (f : M.Hom N) : ↑M.toProfinite.toTop →ₜ* ↑N.toProfinite.toTopThe underlying `ContinuousMonoidHom`.Q2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor..toBoundaryQ2Presentation.BoundaryPackage.toBoundary {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) : Γ ⟶ Q2Presentation.Boundary**The boundary map** `b_Γ : Γ ⟶ ∂_bd` (manuscript `eq:boundarymap`), the universal map into the fibre product induced by the compatible pair `(tameMap, pro2Map)`.) (Q2Presentation.gammaGenQ2Presentation.gammaGen (a : Q2Presentation.Gen) : ↑Q2Presentation.GammaA.toProfinite.toTopThe four universal generators `σ, τ, x₀, x₁` of `Γ_A`, as the compatible families of marked generators.aQ2Presentation.Gen))) → Function.SurjectiveFunction.Surjective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called surjective if every `b : β` is equal to `f a` for some `a : α`.⇑(Q2Presentation.Lifting.rowMapQ2Presentation.Lifting.rowMap {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) [Finite Yt.Y] (q : Q2Presentation.Marking Yt.Y) : (Q2Presentation.Gen → Q2Presentation.Lifting.NAdd E) →ₗ[ZMod 2] Q2Presentation.Lifting.NAdd E × Q2Presentation.Lifting.NAdd E**The row map**: both relator shadows, as one linear map.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) qQ2Presentation.Marking p.fst.Y)) ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).∀ (fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)): Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor))), (∀ (yp.fst.Y: pQ2Presentation.Induction.FramedPair.fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair..YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (mQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K): Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)), fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))((Q2Presentation.Lifting.conjEndNQ2Presentation.Lifting.conjEndN {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) (y : Yt.Y) : Module.End (ZMod 2) (Q2Presentation.Lifting.NAdd E)Right conjugation by `y` as an `F₂`-linear endomorphism of `N`.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) yp.fst.Y) mQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief 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`.fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))mQ2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)) → fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief 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**The consolidated XR-layer statement, PROVEN** (`prop:defduality` at the Frattini layer in the `𝒳_R = 0` branch; manuscript l.4207–4262): given no nonzero `C`-invariant duals on the raw `R`-module, the row system at the Frattini kernel is surjective at every frame-compatible marking (five-lemma + structured simple sections + the Bockstein step), and invariant duals vanish in the consumer spelling (transport).
-
theoremdefined in Q2Presentation/Induction/ZeroEdgeMuCandidate.leancomplete
theorem Q2Presentation.Induction.weakZ1_tChild_card_gammaA_intrinsic {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.XRZero.xrChild chief K).fst (Q2Presentation.Induction.mChildKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.XRZero.xrChild chief K).snd: Q2Presentation.TorsorProgram.coverLiftTotalQ2Presentation.TorsorProgram.coverLiftTotal (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (F : Q2Presentation.BoundaryFrame Yt) : Type**The cover-lift total space**: framed continuous homs into the AMBIENT target whose projection to the child is onto (`lem:covertransform`: all lifts of all unobstructed exact-image maps at once; surjectivity onto the ambient target NOT imposed — these are the weak lifts).(Q2Presentation.Induction.XRZero.xrChildQ2Presentation.Induction.XRZero.xrChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPairThe `𝒳_R = 0` child: the quotient framed pair at `N = Φ`-layer.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.mChildKernelQ2Presentation.Induction.mChildKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.XRZero.xrChild chief K).fst**The elementary `M`-kernel at the child** `B = Y/Φ(K)` (`lem:simplehead` carrier for `lem:elementarystage`): `N = M' = K/Φ(K)`.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.YQ2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.Induction.XRZero.xrChildQ2Presentation.Induction.XRZero.xrChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPairThe `𝒳_R = 0` child: the quotient framed pair at `N = Φ`-layer.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.) : Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Induction.weakZ1Q2Presentation.Induction.weakZ1 {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) {Γ : ProfiniteGrp.{0}} (h : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Type**The weak-base twisted-cocycle set** of an ARBITRARY continuous hom into the target, relative to an elementary kernel — the weak-base generalization of `TorsorProgram.Z1` (no surjectivity onto the quotient imposed; the basepoint is the hom itself). Carrier chosen to match the `EdgeTwistLocalCore` twist layer verbatim.(Q2Presentation.Induction.tChildKernelQ2Presentation.Induction.tChildKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.XRZero.xrChild chief K).fst**The elementary `T`-kernel at the child** (for the `|Z¹(T)|`-numerics and the twist calculus): `N = T' = (K∩S)Φ(K)/Φ(K)`.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) ↑fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.XRZero.xrChild chief K).fst (Q2Presentation.Induction.mChildKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.XRZero.xrChild chief K).snd) =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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.tChildKernelQ2Presentation.Induction.tChildKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.XRZero.xrChild chief K).fst**The elementary `T`-kernel at the child** (for the `|Z¹(T)|`-numerics and the twist calculus): `N = T' = (K∩S)Φ(K)/Φ(K)`.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) ^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`.2 *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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.mapInvDualsQ2Presentation.Induction.mapInvDuals {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) {Γ : ProfiniteGrp.{0}} (h : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Submodule (ZMod 2) (Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E))**The `g`-INTRINSIC invariant duals**: functionals on the kernel module invariant under the source-action THROUGH the hom — only the operators in the image are quantified. At weak (non-surjective) homs this can be STRICTLY larger than the target-level `conjInvDuals E` (`audit/CITABILITY_AUDIT_20260708.md` §G1: hard-coding `conjInvDuals` at weak bases would be a smuggled invariance transfer).(Q2Presentation.Induction.tChildKernelQ2Presentation.Induction.tChildKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.XRZero.xrChild chief K).fst**The elementary `T`-kernel at the child** (for the `|Z¹(T)|`-numerics and the twist calculus): `N = T' = (K∩S)Φ(K)/Φ(K)`.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) ↑fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.XRZero.xrChild chief K).fst (Q2Presentation.Induction.mChildKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.XRZero.xrChild chief K).snd)theorem Q2Presentation.Induction.weakZ1_tChild_card_gammaA_intrinsic {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.XRZero.xrChild chief K).fst (Q2Presentation.Induction.mChildKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.XRZero.xrChild chief K).snd: Q2Presentation.TorsorProgram.coverLiftTotalQ2Presentation.TorsorProgram.coverLiftTotal (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (F : Q2Presentation.BoundaryFrame Yt) : Type**The cover-lift total space**: framed continuous homs into the AMBIENT target whose projection to the child is onto (`lem:covertransform`: all lifts of all unobstructed exact-image maps at once; surjectivity onto the ambient target NOT imposed — these are the weak lifts).(Q2Presentation.Induction.XRZero.xrChildQ2Presentation.Induction.XRZero.xrChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPairThe `𝒳_R = 0` child: the quotient framed pair at `N = Φ`-layer.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.mChildKernelQ2Presentation.Induction.mChildKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.XRZero.xrChild chief K).fst**The elementary `M`-kernel at the child** `B = Y/Φ(K)` (`lem:simplehead` carrier for `lem:elementarystage`): `N = M' = K/Φ(K)`.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.YQ2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.Induction.XRZero.xrChildQ2Presentation.Induction.XRZero.xrChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPairThe `𝒳_R = 0` child: the quotient framed pair at `N = Φ`-layer.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.) : Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Induction.weakZ1Q2Presentation.Induction.weakZ1 {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) {Γ : ProfiniteGrp.{0}} (h : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Type**The weak-base twisted-cocycle set** of an ARBITRARY continuous hom into the target, relative to an elementary kernel — the weak-base generalization of `TorsorProgram.Z1` (no surjectivity onto the quotient imposed; the basepoint is the hom itself). Carrier chosen to match the `EdgeTwistLocalCore` twist layer verbatim.(Q2Presentation.Induction.tChildKernelQ2Presentation.Induction.tChildKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.XRZero.xrChild chief K).fst**The elementary `T`-kernel at the child** (for the `|Z¹(T)|`-numerics and the twist calculus): `N = T' = (K∩S)Φ(K)/Φ(K)`.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) ↑fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.XRZero.xrChild chief K).fst (Q2Presentation.Induction.mChildKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.XRZero.xrChild chief K).snd) =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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.tChildKernelQ2Presentation.Induction.tChildKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.XRZero.xrChild chief K).fst**The elementary `T`-kernel at the child** (for the `|Z¹(T)|`-numerics and the twist calculus): `N = T' = (K∩S)Φ(K)/Φ(K)`.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) ^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`.2 *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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.mapInvDualsQ2Presentation.Induction.mapInvDuals {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) {Γ : ProfiniteGrp.{0}} (h : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Submodule (ZMod 2) (Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E))**The `g`-INTRINSIC invariant duals**: functionals on the kernel module invariant under the source-action THROUGH the hom — only the operators in the image are quantified. At weak (non-surjective) homs this can be STRICTLY larger than the target-level `conjInvDuals E` (`audit/CITABILITY_AUDIT_20260708.md` §G1: hard-coding `conjInvDuals` at weak bases would be a smuggled invariance transfer).(Q2Presentation.Induction.tChildKernelQ2Presentation.Induction.tChildKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.XRZero.xrChild chief K).fst**The elementary `T`-kernel at the child** (for the `|Z¹(T)|`-numerics and the twist calculus): `N = T' = (K∩S)Φ(K)/Φ(K)`.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) ↑fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.XRZero.xrChild chief K).fst (Q2Presentation.Induction.mChildKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.XRZero.xrChild chief K).snd)The candidate `T'`-count in the exact clause-(d) shape `|Z¹| = |N|²·|X_g|` — the candidate `prop:defduality` instance at the `T`-layer, division-free.
-
theoremdefined in Q2Presentation/Induction/ZeroEdgeMuCandidate.leancomplete
theorem Q2Presentation.Induction.weakZ1_vLayer_card_gammaA_intrinsic {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.btChild chief K).fst (Q2Presentation.Induction.vLayerKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.btChild chief K).snd: Q2Presentation.TorsorProgram.coverLiftTotalQ2Presentation.TorsorProgram.coverLiftTotal (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (F : Q2Presentation.BoundaryFrame Yt) : Type**The cover-lift total space**: framed continuous homs into the AMBIENT target whose projection to the child is onto (`lem:covertransform`: all lifts of all unobstructed exact-image maps at once; surjectivity onto the ambient target NOT imposed — these are the weak lifts).(Q2Presentation.Induction.btChildQ2Presentation.Induction.btChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The `B/T'`-child**: the framed pair the descended cover covers (`lem:transgression`'s base, manuscript l.4032–4034; the quotient of the child by the radical layer `T'`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.vLayerKernelQ2Presentation.Induction.vLayerKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.btChild chief K).fst**The `V`-layer elementary kernel** at the descended child `B/T'` (design §4-N5's "`ElementaryKernel btChild` packaging"; `N = vLayer ≅ V = M/T`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.YQ2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.Induction.btChildQ2Presentation.Induction.btChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The `B/T'`-child**: the framed pair the descended cover covers (`lem:transgression`'s base, manuscript l.4032–4034; the quotient of the child by the radical layer `T'`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.) : Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Induction.weakZ1Q2Presentation.Induction.weakZ1 {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) {Γ : ProfiniteGrp.{0}} (h : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Type**The weak-base twisted-cocycle set** of an ARBITRARY continuous hom into the target, relative to an elementary kernel — the weak-base generalization of `TorsorProgram.Z1` (no surjectivity onto the quotient imposed; the basepoint is the hom itself). Carrier chosen to match the `EdgeTwistLocalCore` twist layer verbatim.(Q2Presentation.Induction.vLayerKernelQ2Presentation.Induction.vLayerKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.btChild chief K).fst**The `V`-layer elementary kernel** at the descended child `B/T'` (design §4-N5's "`ElementaryKernel btChild` packaging"; `N = vLayer ≅ V = M/T`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) ↑fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.btChild chief K).fst (Q2Presentation.Induction.vLayerKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.btChild chief K).snd) =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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.vLayerKernelQ2Presentation.Induction.vLayerKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.btChild chief K).fst**The `V`-layer elementary kernel** at the descended child `B/T'` (design §4-N5's "`ElementaryKernel btChild` packaging"; `N = vLayer ≅ V = M/T`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) ^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`.2 *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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.mapInvDualsQ2Presentation.Induction.mapInvDuals {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) {Γ : ProfiniteGrp.{0}} (h : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Submodule (ZMod 2) (Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E))**The `g`-INTRINSIC invariant duals**: functionals on the kernel module invariant under the source-action THROUGH the hom — only the operators in the image are quantified. At weak (non-surjective) homs this can be STRICTLY larger than the target-level `conjInvDuals E` (`audit/CITABILITY_AUDIT_20260708.md` §G1: hard-coding `conjInvDuals` at weak bases would be a smuggled invariance transfer).(Q2Presentation.Induction.vLayerKernelQ2Presentation.Induction.vLayerKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.btChild chief K).fst**The `V`-layer elementary kernel** at the descended child `B/T'` (design §4-N5's "`ElementaryKernel btChild` packaging"; `N = vLayer ≅ V = M/T`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) ↑fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.btChild chief K).fst (Q2Presentation.Induction.vLayerKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.btChild chief K).snd)theorem Q2Presentation.Induction.weakZ1_vLayer_card_gammaA_intrinsic {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.btChild chief K).fst (Q2Presentation.Induction.vLayerKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.btChild chief K).snd: Q2Presentation.TorsorProgram.coverLiftTotalQ2Presentation.TorsorProgram.coverLiftTotal (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (F : Q2Presentation.BoundaryFrame Yt) : Type**The cover-lift total space**: framed continuous homs into the AMBIENT target whose projection to the child is onto (`lem:covertransform`: all lifts of all unobstructed exact-image maps at once; surjectivity onto the ambient target NOT imposed — these are the weak lifts).(Q2Presentation.Induction.btChildQ2Presentation.Induction.btChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The `B/T'`-child**: the framed pair the descended cover covers (`lem:transgression`'s base, manuscript l.4032–4034; the quotient of the child by the radical layer `T'`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).fstSigma.fst.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : αThe first component of a dependent pair.(Q2Presentation.Induction.vLayerKernelQ2Presentation.Induction.vLayerKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.btChild chief K).fst**The `V`-layer elementary kernel** at the descended child `B/T'` (design §4-N5's "`ElementaryKernel btChild` packaging"; `N = vLayer ≅ V = M/T`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.YQ2Presentation.boundaryPackage_GammaAQ2Presentation.boundaryPackage_GammaA : Q2Presentation.BoundaryPackage Q2Presentation.GammaA**The candidate boundary package** (manuscript Prop 3.14, `prop:compatiblemarking`; plan Turn 4 §6). The Stage-C data of `Γ_A`: the common tame quotient `gammaTameMap`, the maximal pro-`2` quotient `p : Γ_A ⟶ Π`, and the common unramified character `ν = gammaTameMap ≫ ν_t`, through which both factor.(Q2Presentation.Induction.btChildQ2Presentation.Induction.btChild {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Induction.FramedPair**The `B/T'`-child**: the framed pair the descended cover covers (`lem:transgression`'s base, manuscript l.4032–4034; the quotient of the child by the radical layer `T'`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).sndSigma.snd.{u, v} {α : Type u} {β : α → Type v} (self : Sigma β) : β self.fstThe second component of a dependent pair. Its type depends on the first component.) : Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Induction.weakZ1Q2Presentation.Induction.weakZ1 {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) {Γ : ProfiniteGrp.{0}} (h : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Type**The weak-base twisted-cocycle set** of an ARBITRARY continuous hom into the target, relative to an elementary kernel — the weak-base generalization of `TorsorProgram.Z1` (no surjectivity onto the quotient imposed; the basepoint is the hom itself). Carrier chosen to match the `EdgeTwistLocalCore` twist layer verbatim.(Q2Presentation.Induction.vLayerKernelQ2Presentation.Induction.vLayerKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.btChild chief K).fst**The `V`-layer elementary kernel** at the descended child `B/T'` (design §4-N5's "`ElementaryKernel btChild` packaging"; `N = vLayer ≅ V = M/T`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) ↑fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.btChild chief K).fst (Q2Presentation.Induction.vLayerKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.btChild chief K).snd) =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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.vLayerKernelQ2Presentation.Induction.vLayerKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.btChild chief K).fst**The `V`-layer elementary kernel** at the descended child `B/T'` (design §4-N5's "`ElementaryKernel btChild` packaging"; `N = vLayer ≅ V = M/T`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) ^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`.2 *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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.↥(Q2Presentation.Induction.mapInvDualsQ2Presentation.Induction.mapInvDuals {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) {Γ : ProfiniteGrp.{0}} (h : Γ ⟶ ProfiniteGrp.ofFiniteGrp (FiniteGrp.of Yt.Y)) : Submodule (ZMod 2) (Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E))**The `g`-INTRINSIC invariant duals**: functionals on the kernel module invariant under the source-action THROUGH the hom — only the operators in the image are quantified. At weak (non-surjective) homs this can be STRICTLY larger than the target-level `conjInvDuals E` (`audit/CITABILITY_AUDIT_20260708.md` §G1: hard-coding `conjInvDuals` at weak bases would be a smuggled invariance transfer).(Q2Presentation.Induction.vLayerKernelQ2Presentation.Induction.vLayerKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Induction.btChild chief K).fst**The `V`-layer elementary kernel** at the descended child `B/T'` (design §4-N5's "`ElementaryKernel btChild` packaging"; `N = vLayer ≅ V = M/T`).chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) ↑fQ2Presentation.TorsorProgram.coverLiftTotal (Q2Presentation.Induction.btChild chief K).fst (Q2Presentation.Induction.vLayerKernel chief K).N Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.btChild chief K).snd)The candidate `V`-layer count in the exact clause-(d) shape `|Z¹| = |N|²·|X_g|` — the candidate `prop:defduality` instance at the `V`-layer.
-
theoremdefined in Q2Presentation/Lifting/CoverEight.leancomplete
theorem Q2Presentation.Lifting.rowMap_card_two_apply {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] (EQ2Presentation.Lifting.ElementaryKernel Yt: Q2Presentation.Lifting.ElementaryKernelQ2Presentation.Lifting.ElementaryKernel (Yt : Q2Presentation.BoundaryFramedTarget) : TypeA normal subgroup of a framed target that is killed by the decoration, contained in the wild kernel, **abelian**, and of **exponent 2** — the shape of the chief kernels the cochain keeps quantify over.YtQ2Presentation.BoundaryFramedTarget) (hcardNat.card (Q2Presentation.Lifting.NAdd E) = 2: Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt) =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`.2) (qQ2Presentation.Marking Yt.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd E: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.→ Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt) : (Q2Presentation.Lifting.rowMapQ2Presentation.Lifting.rowMap {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) [Finite Yt.Y] (q : Q2Presentation.Marking Yt.Y) : (Q2Presentation.Gen → Q2Presentation.Lifting.NAdd E) →ₗ[ZMod 2] Q2Presentation.Lifting.NAdd E × Q2Presentation.Lifting.NAdd E**The row map**: both relator shadows, as one linear map.EQ2Presentation.Lifting.ElementaryKernel YtqQ2Presentation.Marking Yt.Y) nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd E=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`.(Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd EQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd EQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.theorem Q2Presentation.Lifting.rowMap_card_two_apply {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] (EQ2Presentation.Lifting.ElementaryKernel Yt: Q2Presentation.Lifting.ElementaryKernelQ2Presentation.Lifting.ElementaryKernel (Yt : Q2Presentation.BoundaryFramedTarget) : TypeA normal subgroup of a framed target that is killed by the decoration, contained in the wild kernel, **abelian**, and of **exponent 2** — the shape of the chief kernels the cochain keeps quantify over.YtQ2Presentation.BoundaryFramedTarget) (hcardNat.card (Q2Presentation.Lifting.NAdd E) = 2: Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt) =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`.2) (qQ2Presentation.Marking Yt.Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd E: Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.→ Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt) : (Q2Presentation.Lifting.rowMapQ2Presentation.Lifting.rowMap {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) [Finite Yt.Y] (q : Q2Presentation.Marking Yt.Y) : (Q2Presentation.Gen → Q2Presentation.Lifting.NAdd E) →ₗ[ZMod 2] Q2Presentation.Lifting.NAdd E × Q2Presentation.Lifting.NAdd E**The row map**: both relator shadows, as one linear map.EQ2Presentation.Lifting.ElementaryKernel YtqQ2Presentation.Marking Yt.Y) nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd E=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`.(Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd EQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd EQ2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.**Diagonal rows at any card-2 kernel** (trivial Jacobian `(b, b)` of `prop:defduality` l.1935–1939), at EVERY marking: the card-2 kernel makes every functional conjugation-invariant, so both relator rows collapse to the τ-slot (transcription of `rowMap_scalarRelKernel_apply`, `ScalarObstruction.lean:78–120`).
-
theoremdefined in Q2Presentation/Lifting/Duality.leancomplete
theorem Q2Presentation.Lifting.cupToDual_injective : Function.Injective
Function.Injective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called injective if `f x = f y` implies `x = y`.⇑Q2Presentation.Lifting.cupToDualQ2Presentation.Lifting.cupToDual : Q2Presentation.Lifting.H1trivModel →ₗ[ZMod 2] Module.Dual (ZMod 2) Q2Presentation.Lifting.H1trivModelThe map `H¹ → (H¹)^∨` induced by the cup pairing (`x ↦ ⟨x, ·⟩`).theorem Q2Presentation.Lifting.cupToDual_injective : Function.Injective
Function.Injective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called injective if `f x = f y` implies `x = y`.⇑Q2Presentation.Lifting.cupToDualQ2Presentation.Lifting.cupToDual : Q2Presentation.Lifting.H1trivModel →ₗ[ZMod 2] Module.Dual (ZMod 2) Q2Presentation.Lifting.H1trivModelThe map `H¹ → (H¹)^∨` induced by the cup pairing (`x ↦ ⟨x, ·⟩`).The cup pairing is **nondegenerate** / perfect: the induced map `H¹ → (H¹)^∨` is injective (`prop:defduality`, via `cupFormQ_nondegenerate`).
-
defdefined in Q2Presentation/Lifting/Duality.leancomplete
def Q2Presentation.Lifting.cupEquivDual : Q2Presentation.Lifting.H1trivModel
Q2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.≃ₗ[LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map.Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) Q2Presentation.Lifting.H1trivModelQ2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.def Q2Presentation.Lifting.cupEquivDual : Q2Presentation.Lifting.H1trivModel
Q2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.≃ₗ[LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map.Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) Q2Presentation.Lifting.H1trivModelQ2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.**The degree-one cup pairing is perfect** (`prop:defduality`): for the trivial module it induces a self-duality `H¹ ≃ₗ (H¹)^∨`.
-
theoremdefined in Q2Presentation/Lifting/Duality.leancomplete
theorem Q2Presentation.Lifting.finrank_H1_eq_dual : Module.finrank
Module.finrank.{u_1, u_2} (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] : ℕThe rank of a module as a natural number. For a finite-dimensional vector space `V` over a field `k`, `Module.finrank k V` is equal to the dimension of `V` over `k`. For a general module `M` over a ring `R`, `Module.finrank R M` is defined to be the supremum of the cardinalities of the `R`-linearly independent subsets of `M`, if this supremum is finite. It is defined by convention to be `0` if this supremum is infinite. See `Module.rank` for a cardinal-valued version where infinite rank modules have rank an infinite cardinal. Note that if `R` is not a field then there can exist modules `M` with `¬(Module.Finite R M)` but `finrank R M ≠ 0`. For example `ℚ` has `finrank` equal to `1` over `ℤ`, because the nonempty `ℤ`-linearly independent subsets of `ℚ` are precisely the nonzero singletons.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) Q2Presentation.Lifting.H1trivModelQ2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.=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`.Module.finrankModule.finrank.{u_1, u_2} (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] : ℕThe rank of a module as a natural number. For a finite-dimensional vector space `V` over a field `k`, `Module.finrank k V` is equal to the dimension of `V` over `k`. For a general module `M` over a ring `R`, `Module.finrank R M` is defined to be the supremum of the cardinalities of the `R`-linearly independent subsets of `M`, if this supremum is finite. It is defined by convention to be `0` if this supremum is infinite. See `Module.rank` for a cardinal-valued version where infinite rank modules have rank an infinite cardinal. Note that if `R` is not a field then there can exist modules `M` with `¬(Module.Finite R M)` but `finrank R M ≠ 0`. For example `ℚ` has `finrank` equal to `1` over `ℤ`, because the nonempty `ℤ`-linearly independent subsets of `ℚ` are precisely the nonzero singletons.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) Q2Presentation.Lifting.H1trivModelQ2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.)theorem Q2Presentation.Lifting.finrank_H1_eq_dual : Module.finrank
Module.finrank.{u_1, u_2} (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] : ℕThe rank of a module as a natural number. For a finite-dimensional vector space `V` over a field `k`, `Module.finrank k V` is equal to the dimension of `V` over `k`. For a general module `M` over a ring `R`, `Module.finrank R M` is defined to be the supremum of the cardinalities of the `R`-linearly independent subsets of `M`, if this supremum is finite. It is defined by convention to be `0` if this supremum is infinite. See `Module.rank` for a cardinal-valued version where infinite rank modules have rank an infinite cardinal. Note that if `R` is not a field then there can exist modules `M` with `¬(Module.Finite R M)` but `finrank R M ≠ 0`. For example `ℚ` has `finrank` equal to `1` over `ℤ`, because the nonempty `ℤ`-linearly independent subsets of `ℚ` are precisely the nonzero singletons.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) Q2Presentation.Lifting.H1trivModelQ2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.=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`.Module.finrankModule.finrank.{u_1, u_2} (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] : ℕThe rank of a module as a natural number. For a finite-dimensional vector space `V` over a field `k`, `Module.finrank k V` is equal to the dimension of `V` over `k`. For a general module `M` over a ring `R`, `Module.finrank R M` is defined to be the supremum of the cardinalities of the `R`-linearly independent subsets of `M`, if this supremum is finite. It is defined by convention to be `0` if this supremum is infinite. See `Module.rank` for a cardinal-valued version where infinite rank modules have rank an infinite cardinal. Note that if `R` is not a field then there can exist modules `M` with `¬(Module.Finite R M)` but `finrank R M ≠ 0`. For example `ℚ` has `finrank` equal to `1` over `ℤ`, because the nonempty `ℤ`-linearly independent subsets of `ℚ` are precisely the nonzero singletons.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) Q2Presentation.Lifting.H1trivModelQ2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.)**Dimension equality** from the perfect pairing (`prop:defduality`): `dim H¹ = dim (H¹)^∨`.
-
defdefined in Q2Presentation/Lifting/Duality.leancomplete
def Q2Presentation.Lifting.Z1_trivial_equiv_model : ↥(Q2Presentation.Lifting.d1
Q2Presentation.Lifting.d1.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] (Sinv T P : Module.End (ZMod 2) A) : A × A × A × A →ₗ[ZMod 2] A × AThe candidate `d¹`, the evaluated Fox Jacobian (manuscript `lem:jacobian`, eq:simplejac): tame row `(S⁻¹(1+T), S⁻¹+1+T, 0, 0)` and wild row `(0, P, 0, P+S⁻¹)`, where `P` is the norm of `⟨T⟩` and `Sinv = S⁻¹`.1 1 1).kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.≃ₗ[LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map.Q2Presentation.Lifting.H1trivModelQ2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.def Q2Presentation.Lifting.Z1_trivial_equiv_model : ↥(Q2Presentation.Lifting.d1
Q2Presentation.Lifting.d1.{u_1} {A : Type u_1} [AddCommGroup A] [Module (ZMod 2) A] (Sinv T P : Module.End (ZMod 2) A) : A × A × A × A →ₗ[ZMod 2] A × AThe candidate `d¹`, the evaluated Fox Jacobian (manuscript `lem:jacobian`, eq:simplejac): tame row `(S⁻¹(1+T), S⁻¹+1+T, 0, 0)` and wild row `(0, P, 0, P+S⁻¹)`, where `P` is the norm of `⟨T⟩` and `Sinv = S⁻¹`.1 1 1).kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.≃ₗ[LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map.Q2Presentation.Lifting.H1trivModelQ2Presentation.Lifting.H1trivModel : TypeThe `(σ, x₀, x₁)`-coordinate model of `H¹` for the trivial module `A = F₂`. By `prop:defduality` (l.1936) the trivial-module `H¹` is `3`-dimensional with this basis.**`Z¹ = H¹` for the trivial module is the `(σ, x₀, x₁)`-model `F₂³`** (`prop:defduality`, l.1936): the projection `(a, 0, c, d) ↦ (a, c, d)` is a linear isomorphism `ker d¹ ≃ₗ F₂³`. Since `B¹ = im d⁰ = 0` here (`d0_trivial`), this `ker d¹` is the genuine `H¹`, so the perfect cup pairing `cupPairing` lives on it.
-
theoremdefined in Q2Presentation/Lifting/HeisenbergCup.leancomplete
theorem Q2Presentation.Lifting.cupFormQ_nondegenerate {x
ZMod 2 × ZMod 2 × ZMod 2: ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2} (h∀ (y : ZMod 2 × ZMod 2 × ZMod 2), Q2Presentation.Lifting.cupFormQ x y = 0: ∀ (yZMod 2 × ZMod 2 × ZMod 2: ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2), Q2Presentation.Lifting.cupFormQQ2Presentation.Lifting.cupFormQ (x y : ZMod 2 × ZMod 2 × ZMod 2) : ZMod 2The **Hilbert / cup–Bockstein bilinear form** on `F₂³` (manuscript eq:HilbertTable, l.1131): `ℋ((a,b,c),(a',b',c')) = a·c' + c·a' + b·b'`, in coordinates dual to `(σ, x₀, x₁)`. This is the traced Fox–Heisenberg form `ad'+da'+cc'` on the `(σ,x₀,x₁)`-basis of `H¹` for the trivial module (l.1944, under the relabel `(a,b,c)↦(a,c,d)`), with matrix `[[0,0,1],[0,1,0],[1,0,0]]`.xZMod 2 × ZMod 2 × ZMod 2yZMod 2 × ZMod 2 × ZMod 2=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) : xZMod 2 × ZMod 2 × ZMod 2=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 Q2Presentation.Lifting.cupFormQ_nondegenerate {x
ZMod 2 × ZMod 2 × ZMod 2: ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2} (h∀ (y : ZMod 2 × ZMod 2 × ZMod 2), Q2Presentation.Lifting.cupFormQ x y = 0: ∀ (yZMod 2 × ZMod 2 × ZMod 2: ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2 ×Prod.{u, v} (α : Type u) (β : Type v) : Type (max u v)The product type, usually written `α × β`. Product types are also called pair or tuple types. Elements of this type are pairs in which the first element is an `α` and the second element is a `β`. Products nest to the right, so `(x, y, z) : α × β × γ` is equivalent to `(x, (y, z)) : α × (β × γ)`. Conventions for notations in identifiers: * The recommended spelling of `×` in identifiers is `Prod`.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2), Q2Presentation.Lifting.cupFormQQ2Presentation.Lifting.cupFormQ (x y : ZMod 2 × ZMod 2 × ZMod 2) : ZMod 2The **Hilbert / cup–Bockstein bilinear form** on `F₂³` (manuscript eq:HilbertTable, l.1131): `ℋ((a,b,c),(a',b',c')) = a·c' + c·a' + b·b'`, in coordinates dual to `(σ, x₀, x₁)`. This is the traced Fox–Heisenberg form `ad'+da'+cc'` on the `(σ,x₀,x₁)`-basis of `H¹` for the trivial module (l.1944, under the relabel `(a,b,c)↦(a,c,d)`), with matrix `[[0,0,1],[0,1,0],[1,0,0]]`.xZMod 2 × ZMod 2 × ZMod 2yZMod 2 × ZMod 2 × ZMod 2=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) : xZMod 2 × ZMod 2 × ZMod 2=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 Hilbert pairing is **nondegenerate** (perfect): if `x` pairs to `0` with every vector then `x = 0`. Equivalently its matrix `[[0,0,1],[0,1,0],[1,0,0]]` is nonsingular — the perfect cup pairing of `prop:defduality`.
-
theoremdefined in Q2Presentation/Lifting/ScalarObstruction.leancomplete
theorem Q2Presentation.Lifting.rowMap_scalarRelKernel_apply {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] (EQ2Presentation.Lifting.ElementaryKernel Yt: Q2Presentation.Lifting.ElementaryKernelQ2Presentation.Lifting.ElementaryKernel (Yt : Q2Presentation.BoundaryFramedTarget) : TypeA normal subgroup of a framed target that is killed by the decoration, contained in the wild kernel, **abelian**, and of **exponent 2** — the shape of the chief kernels the cochain keeps quantify over.YtQ2Presentation.BoundaryFramedTarget) (lamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E): Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt)) (hinvlam ∈ Q2Presentation.Lifting.conjInvDuals E: lamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Q2Presentation.Lifting.conjInvDualsQ2Presentation.Lifting.conjInvDuals {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Submodule (ZMod 2) (Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E))The conjugation-invariant duals `X = (R^∨)^Y = (R^∨)^C` of an elementary kernel (consumer spelling of the manuscript's `𝒳_R`, §7 l.3720–3723).EQ2Presentation.Lifting.ElementaryKernel Yt) (hnelam ≠ 0: lamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (q'Q2Presentation.Marking (Q2Presentation.Lifting.scalarCoverTarget E lam hinv).Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.(Q2Presentation.Lifting.scalarCoverTargetQ2Presentation.Lifting.scalarCoverTarget {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] (E : Q2Presentation.Lifting.ElementaryKernel Yt) (lam : Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)) (hinv : lam ∈ Q2Presentation.Lifting.conjInvDuals E) : Q2Presentation.BoundaryFramedTarget**The scalar pushout target** `B_λ = Y/ker λ` as a framed target (same `H`, `E`, frame; `eq:targettower` refined by l.4219–4223).EQ2Presentation.Lifting.ElementaryKernel YtlamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)hinvlam ∈ Q2Presentation.Lifting.conjInvDuals E).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Lifting.scalarRelKernel E lam hinv): Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.→ Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Lifting.scalarRelKernelQ2Presentation.Lifting.scalarRelKernel {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] (E : Q2Presentation.Lifting.ElementaryKernel Yt) (lam : Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)) (hinv : lam ∈ Q2Presentation.Lifting.conjInvDuals E) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Lifting.scalarCoverTarget E lam hinv)**The relative kernel** `R/ker λ ≤ B_λ` — the deck kernel of the central double cover, as an elementary kernel of the cover target. It is `Subgroup.map`-spelled so Noether III applies on the nose.EQ2Presentation.Lifting.ElementaryKernel YtlamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)hinvlam ∈ Q2Presentation.Lifting.conjInvDuals E)) : (Q2Presentation.Lifting.rowMapQ2Presentation.Lifting.rowMap {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) [Finite Yt.Y] (q : Q2Presentation.Marking Yt.Y) : (Q2Presentation.Gen → Q2Presentation.Lifting.NAdd E) →ₗ[ZMod 2] Q2Presentation.Lifting.NAdd E × Q2Presentation.Lifting.NAdd E**The row map**: both relator shadows, as one linear map.(Q2Presentation.Lifting.scalarRelKernelQ2Presentation.Lifting.scalarRelKernel {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] (E : Q2Presentation.Lifting.ElementaryKernel Yt) (lam : Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)) (hinv : lam ∈ Q2Presentation.Lifting.conjInvDuals E) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Lifting.scalarCoverTarget E lam hinv)**The relative kernel** `R/ker λ ≤ B_λ` — the deck kernel of the central double cover, as an elementary kernel of the cover target. It is `Subgroup.map`-spelled so Noether III applies on the nose.EQ2Presentation.Lifting.ElementaryKernel YtlamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)hinvlam ∈ Q2Presentation.Lifting.conjInvDuals E) q'Q2Presentation.Marking (Q2Presentation.Lifting.scalarCoverTarget E lam hinv).Y) nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Lifting.scalarRelKernel E lam hinv)=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`.(Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Lifting.scalarRelKernel E lam hinv)Q2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Lifting.scalarRelKernel E lam hinv)Q2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.theorem Q2Presentation.Lifting.rowMap_scalarRelKernel_apply {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} [FiniteFinite.{u_3} (α : Sort u_3) : PropA type is `Finite` if it is in bijective correspondence to some `Fin n`. This is similar to `Fintype`, but `Finite` is a proposition rather than data. A particular benefit to this is that `Finite` instances are definitionally equal to one another (due to proof irrelevance) rather than being merely propositionally equal, and, furthermore, `Finite` instances generally avoid the need for `Decidable` instances. One other notable difference is that `Finite` allows there to be `Finite p` instances for all `p : Prop`, which is not allowed by `Fintype` due to universe constraints. An application of this is that `Finite (x ∈ s → β x)` follows from the general instance for pi types, assuming `[∀ x, Finite (β x)]`. Implementation note: this is a reason `Finite α` is not defined as `Nonempty (Fintype α)`. Every `Fintype` instance provides a `Finite` instance via `Finite.of_fintype`. Conversely, one can noncomputably create a `Fintype` instance from a `Finite` instance via `Fintype.ofFinite`. In a proof one might write ```lean have := Fintype.ofFinite α ``` to obtain such an instance. Do not write noncomputable `Fintype` instances; instead write `Finite` instances and use this `Fintype.ofFinite` interface. The `Fintype` instances should be relied upon to be computable for evaluation purposes. Theorems should use `Finite` instead of `Fintype`, unless definitions in the theorem statement require `Fintype`. Definitions should prefer `Finite` as well, unless it is important that the definitions are meant to be computable in the reduction or `#eval` sense.YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.] (EQ2Presentation.Lifting.ElementaryKernel Yt: Q2Presentation.Lifting.ElementaryKernelQ2Presentation.Lifting.ElementaryKernel (Yt : Q2Presentation.BoundaryFramedTarget) : TypeA normal subgroup of a framed target that is killed by the decoration, contained in the wild kernel, **abelian**, and of **exponent 2** — the shape of the chief kernels the cochain keeps quantify over.YtQ2Presentation.BoundaryFramedTarget) (lamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E): Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt)) (hinvlam ∈ Q2Presentation.Lifting.conjInvDuals E: lamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Q2Presentation.Lifting.conjInvDualsQ2Presentation.Lifting.conjInvDuals {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Submodule (ZMod 2) (Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E))The conjugation-invariant duals `X = (R^∨)^Y = (R^∨)^C` of an elementary kernel (consumer spelling of the manuscript's `𝒳_R`, §7 l.3720–3723).EQ2Presentation.Lifting.ElementaryKernel Yt) (hnelam ≠ 0: lamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)≠Ne.{u} {α : Sort u} (a b : α) : Prop`a ≠ b`, or `Ne a b` is defined as `¬ (a = b)` or `a = b → False`, and asserts that `a` and `b` are not equal. Conventions for notations in identifiers: * The recommended spelling of `≠` in identifiers is `ne`.0) (q'Q2Presentation.Marking (Q2Presentation.Lifting.scalarCoverTarget E lam hinv).Y: Q2Presentation.MarkingQ2Presentation.Marking.{u_1} (G : Type u_1) [Group G] : Type u_1A marking assigns a group element to each of the four generators.(Q2Presentation.Lifting.scalarCoverTargetQ2Presentation.Lifting.scalarCoverTarget {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] (E : Q2Presentation.Lifting.ElementaryKernel Yt) (lam : Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)) (hinv : lam ∈ Q2Presentation.Lifting.conjInvDuals E) : Q2Presentation.BoundaryFramedTarget**The scalar pushout target** `B_λ = Y/ker λ` as a framed target (same `H`, `E`, frame; `eq:targettower` refined by l.4219–4223).EQ2Presentation.Lifting.ElementaryKernel YtlamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)hinvlam ∈ Q2Presentation.Lifting.conjInvDuals E).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Lifting.scalarRelKernel E lam hinv): Q2Presentation.GenQ2Presentation.Gen : TypeThe four marked generators of the candidate presentation.→ Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Lifting.scalarRelKernelQ2Presentation.Lifting.scalarRelKernel {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] (E : Q2Presentation.Lifting.ElementaryKernel Yt) (lam : Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)) (hinv : lam ∈ Q2Presentation.Lifting.conjInvDuals E) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Lifting.scalarCoverTarget E lam hinv)**The relative kernel** `R/ker λ ≤ B_λ` — the deck kernel of the central double cover, as an elementary kernel of the cover target. It is `Subgroup.map`-spelled so Noether III applies on the nose.EQ2Presentation.Lifting.ElementaryKernel YtlamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)hinvlam ∈ Q2Presentation.Lifting.conjInvDuals E)) : (Q2Presentation.Lifting.rowMapQ2Presentation.Lifting.rowMap {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) [Finite Yt.Y] (q : Q2Presentation.Marking Yt.Y) : (Q2Presentation.Gen → Q2Presentation.Lifting.NAdd E) →ₗ[ZMod 2] Q2Presentation.Lifting.NAdd E × Q2Presentation.Lifting.NAdd E**The row map**: both relator shadows, as one linear map.(Q2Presentation.Lifting.scalarRelKernelQ2Presentation.Lifting.scalarRelKernel {Yt : Q2Presentation.BoundaryFramedTarget} [Finite Yt.Y] (E : Q2Presentation.Lifting.ElementaryKernel Yt) (lam : Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)) (hinv : lam ∈ Q2Presentation.Lifting.conjInvDuals E) : Q2Presentation.Lifting.ElementaryKernel (Q2Presentation.Lifting.scalarCoverTarget E lam hinv)**The relative kernel** `R/ker λ ≤ B_λ` — the deck kernel of the central double cover, as an elementary kernel of the cover target. It is `Subgroup.map`-spelled so Noether III applies on the nose.EQ2Presentation.Lifting.ElementaryKernel YtlamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)hinvlam ∈ Q2Presentation.Lifting.conjInvDuals E) q'Q2Presentation.Marking (Q2Presentation.Lifting.scalarCoverTarget E lam hinv).Y) nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Lifting.scalarRelKernel E lam hinv)=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`.(Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Lifting.scalarRelKernel E lam hinv)Q2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.nQ2Presentation.Gen → Q2Presentation.Lifting.NAdd (Q2Presentation.Lifting.scalarRelKernel E lam hinv)Q2Presentation.Gen.tauQ2Presentation.Gen.tau : Q2Presentation.Gen)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`. Conventions for notations in identifiers: * The recommended spelling of `(a, b)` in identifiers is `mk`.**Diagonal rows at the relative kernel** (trivial Jacobian `(b,b)`, `prop:defduality` l.1935–1939, relative form), at EVERY marking: the card-2 kernel makes every functional conjugation-invariant, so both relator rows collapse to the τ-slot.
Proved in §5 of the paper. Ingredients: Lemma 5.8 Lemma 5.10 Lemma 5.9.
-
Q2Presentation.Induction.EdgeTwistReachGQ2[complete] -
Q2Presentation.Induction.q2_localduality[complete] -
Q2Presentation.Local.q2_local_Z1_dim[complete]
Proposition 5.16 of the paper (Local lifting duality).
For every elementary \F_2[C]-module A,
H^2_{F,\rho}(A)^\vee\cong (A^\vee)^C, \qquad \dim Z^1_{F,\rho}(A)=2\dim A+\dim(A^\vee)^C.
The local cup product and invariant map give perfect pairings
H^i_{F,\rho}(A)\times H^{2-i}_{F,\rho}(A^\vee)\to\F_2.
Lean code for Theorem5.13●3 declarations
Associated Lean declarations
-
Q2Presentation.Induction.EdgeTwistReachGQ2[complete]
-
Q2Presentation.Induction.q2_localduality[complete]
-
Q2Presentation.Local.q2_local_Z1_dim[complete]
-
Q2Presentation.Induction.EdgeTwistReachGQ2[complete] -
Q2Presentation.Induction.q2_localduality[complete] -
Q2Presentation.Local.q2_local_Z1_dim[complete]
-
defdefined in Q2Presentation/Induction/EdgeHalvingLocal.leancomplete
def Q2Presentation.Induction.EdgeTwistReachGQ2 {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (lamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)): Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor))) (hinvlam ∈ Q2Presentation.Lifting.conjInvDuals (Q2Presentation.Induction.xrKernel chief K): lamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Q2Presentation.Lifting.conjInvDualsQ2Presentation.Lifting.conjInvDuals {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Submodule (ZMod 2) (Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E))The conjugation-invariant duals `X = (R^∨)^Y = (R^∨)^C` of an elementary kernel (consumer spelling of the manuscript's `𝒳_R`, §7 l.3720–3723).(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) : PropThe universe of propositions. `Prop ≡ Sort 0`. Every proposition is propositionally equal to either `True` or `False`.def Q2Presentation.Induction.EdgeTwistReachGQ2 {p
Q2Presentation.Induction.FramedPair: Q2Presentation.Induction.FramedPairQ2Presentation.Induction.FramedPair : Type 1A **framed pair** `(𝒴, F)`: a boundary-framed marked target together with a boundary frame for it (manuscript Definition 4.1 + `eq:beta`). This is the index of Theorem 4.2: the boundary-framed surjection count `e_Γ^β` is a function of the pair. The induction of `sec:induction` ranges over *all* such pairs simultaneously ("the induction is stated globally", l.1213), ordered by `|L_Y|`.} (chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p: Q2Presentation.Induction.FirstNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor (p : Q2Presentation.Induction.FramedPair) : TypeA non-scalar chief factor of `L_Y` that is **first**: every chief factor strictly below it (i.e. with upper term contained in `lower`) is scalar. This is the manuscript's choice `S ◁ P` at l.3616–3623 ("all chief factors below `S` are scalar and `V` is the first non-scalar simple factor"), which `lem:collapse` requires for the coprime step `[S, Ñ] = 1`.pQ2Presentation.Induction.FramedPair) (KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor: Q2Presentation.Induction.KernelMinimalQ2Presentation.Induction.KernelMinimal {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.NonScalarChiefFactor p) : TypeThe manuscript's kernel choice (l.3623): `K ◁ Y`, `K ≤ P`, `KS = P`, and `K` is **⊆-minimal** with these properties — stated as: any `Y`-normal `K' ≤ K` still joining with `S` to `P` equals `K`. (This, not leastness among all candidates, is what `lem:simplehead` and `lem:collapse` use: both apply it to subgroups of `K`.)chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p.toNonScalarChiefFactorQ2Presentation.Induction.FirstNonScalarChiefFactor.toNonScalarChiefFactor {p : Q2Presentation.Induction.FramedPair} (self : Q2Presentation.Induction.FirstNonScalarChiefFactor p) : Q2Presentation.Induction.NonScalarChiefFactor p) (lamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K)): Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor))) (hinvlam ∈ Q2Presentation.Lifting.conjInvDuals (Q2Presentation.Induction.xrKernel chief K): lamModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd (Q2Presentation.Induction.xrKernel chief K))∈Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. Conventions for notations in identifiers: * The recommended spelling of `∈` in identifiers is `mem`.Q2Presentation.Lifting.conjInvDualsQ2Presentation.Lifting.conjInvDuals {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : Submodule (ZMod 2) (Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E))The conjugation-invariant duals `X = (R^∨)^Y = (R^∨)^C` of an elementary kernel (consumer spelling of the manuscript's `𝒳_R`, §7 l.3720–3723).(Q2Presentation.Induction.xrKernelQ2Presentation.Induction.xrKernel {p : Q2Presentation.Induction.FramedPair} (chief : Q2Presentation.Induction.FirstNonScalarChiefFactor p) (K : Q2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor) : Q2Presentation.Lifting.ElementaryKernel p.fst**The Frattini layer `R = Φ(K)` as an elementary kernel** (`lem:collapse`): normal, inside `L_Y`, `θ`-dead, elementary abelian.chiefQ2Presentation.Induction.FirstNonScalarChiefFactor pKQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor)) : PropThe universe of propositions. `Prop ≡ Sort 0`. Every proposition is propositionally equal to either `True` or `False`.**The twist-reach clause** (the §13-P8WL/§14-S8 minimal keep shape): every weak `M`-lift admits SOME λ-liftable `T'`-twist. This is the irreducible variation-onto residue of `prop:localduality`-perfectness (wall (W2)); everything else in the local R4a halving is counting.
-
theoremdefined in Q2Presentation/Induction/QHalves.leancomplete
theorem Q2Presentation.Induction.q2_localduality {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} (EQ2Presentation.Lifting.ElementaryKernel Yt: Q2Presentation.Lifting.ElementaryKernelQ2Presentation.Lifting.ElementaryKernel (Yt : Q2Presentation.BoundaryFramedTarget) : TypeA normal subgroup of a framed target that is killed by the decoration, contained in the wild kernel, **abelian**, and of **exponent 2** — the shape of the chief kernels the cochain keeps quantify over.YtQ2Presentation.BoundaryFramedTarget) (FQ2Presentation.BoundaryFrame Yt: Q2Presentation.BoundaryFrameQ2Presentation.BoundaryFrame (Yt : Q2Presentation.BoundaryFramedTarget) : TypeA **boundary frame** on a boundary-framed target `𝒴` (manuscript `eq:beta`): the fixed compatible data `α : 𝕋_tame ↠ H`, `ψ : Π → Multiplicative E`, and the induced `β : ∂_bd → H × Multiplicative E`. Surjectivity of `α` records that `H` really is a tame quotient (manuscript: "Fix a finite tame quotient `H`, an epimorphism `α : 𝕋_A ↠ H`").YtQ2Presentation.BoundaryFramedTarget) (hinv∀ (f : Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)), (∀ (y : Yt.Y) (m : Q2Presentation.Lifting.NAdd E), f ((Q2Presentation.Lifting.conjEndN E y) m) = f m) → f = 0: ∀ (fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E): Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt)), (∀ (yYt.Y: YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (mQ2Presentation.Lifting.NAdd E: Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt), fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)((Q2Presentation.Lifting.conjEndNQ2Presentation.Lifting.conjEndN {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) (y : Yt.Y) : Module.End (ZMod 2) (Q2Presentation.Lifting.NAdd E)Right conjugation by `y` as an `F₂`-linear endomorphism of `N`.EQ2Presentation.Lifting.ElementaryKernel YtyYt.Y) mQ2Presentation.Lifting.NAdd E) =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`.fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)mQ2Presentation.Lifting.NAdd E) → fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)=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) (gQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GQ2 (Q2Presentation.TorsorProgram.quotientFramedTarget Yt E.N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame Yt E.N ⋯ ⋯ F): Q2Presentation.boundaryFramedSurjQ2Presentation.boundaryFramedSurj {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (Yt : Q2Presentation.BoundaryFramedTarget) (F : Q2Presentation.BoundaryFrame Yt) : TypeThe **boundary-framed surjections** `e_Γ^β(𝒴)` (manuscript `eq:eGamma`): the continuous surjections `f : Γ ↠ Y` whose induced map to `H × E` is the prescribed `β ∘ b_Γ`, i.e. `q_Y ∘ f = β ∘ b_Γ`. This is the subtype counted in Theorem 4.2; its cardinality is `e_Γ^β(𝒴)`.Q2Presentation.boundaryPackage_GQ2Q2Presentation.boundaryPackage_GQ2 : Q2Presentation.BoundaryPackage Q2Presentation.GQ2Profinite**The local boundary package** `boundaryPackage_GQ2 : BoundaryPackage G_{ℚ₂}` (manuscript Prop 3.14 `prop:compatiblemarking` for `Γ = G_{ℚ₂}`; plan Turn 4 §6), the `G_{ℚ₂}`-side instance of the uniform Stage-C boundary datum. * `tameMap`/`tame_surj`/`tame_nu` — the local tame quotient `G_{ℚ₂} ↠ T_A` with unramified marking `ν_loc`, from the axiom `gq2_tame_quotient` (Prop 3.2 + the local half of Prop `compatiblemarking`); * `pro2Map`/`pro2_surj`/`pro2_nu` — the local maximal pro-`2` quotient `G_{ℚ₂} ↠ Π` with the *same* unramified marking `ν_loc`, proved from the fully marked Labute comparison `labute_GQ2_maxPro2_marked` (`pro2Map_loc`, `pro2Map_loc_surjective`, `pro2Map_loc_nu`); * `nu := ν_loc` — the common unramified character through which both factor.(Q2Presentation.TorsorProgram.quotientFramedTargetQ2Presentation.TorsorProgram.quotientFramedTarget (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) : Q2Presentation.BoundaryFramedTarget**The quotient framed target** `Y/N` (same `H`, same `E`, image wild kernel).YtQ2Presentation.BoundaryFramedTargetEQ2Presentation.Lifting.ElementaryKernel Yt.NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrameQ2Presentation.TorsorProgram.quotientFrame (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) (F : Q2Presentation.BoundaryFrame Yt) : Q2Presentation.BoundaryFrame (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ)The frame transports verbatim (`H`, `E`, `α`, `ψ`, `β` unchanged).YtQ2Presentation.BoundaryFramedTargetEQ2Presentation.Lifting.ElementaryKernel Yt.NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ FQ2Presentation.BoundaryFrame Yt)) : NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.(Q2Presentation.TorsorProgram.liftHomQ2Presentation.TorsorProgram.liftHom (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (F : Q2Presentation.BoundaryFrame Yt) (g : Q2Presentation.boundaryFramedSurj B (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ) (Q2Presentation.TorsorProgram.quotientFrame Yt N hNLY hNθ F)) : Type**All framed lifts** of a child-framed surjection (surjectivity NOT imposed; the Frattini argument recovers it per use-site).YtQ2Presentation.BoundaryFramedTargetEQ2Presentation.Lifting.ElementaryKernel Yt.NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ Q2Presentation.boundaryPackage_GQ2Q2Presentation.boundaryPackage_GQ2 : Q2Presentation.BoundaryPackage Q2Presentation.GQ2Profinite**The local boundary package** `boundaryPackage_GQ2 : BoundaryPackage G_{ℚ₂}` (manuscript Prop 3.14 `prop:compatiblemarking` for `Γ = G_{ℚ₂}`; plan Turn 4 §6), the `G_{ℚ₂}`-side instance of the uniform Stage-C boundary datum. * `tameMap`/`tame_surj`/`tame_nu` — the local tame quotient `G_{ℚ₂} ↠ T_A` with unramified marking `ν_loc`, from the axiom `gq2_tame_quotient` (Prop 3.2 + the local half of Prop `compatiblemarking`); * `pro2Map`/`pro2_surj`/`pro2_nu` — the local maximal pro-`2` quotient `G_{ℚ₂} ↠ Π` with the *same* unramified marking `ν_loc`, proved from the fully marked Labute comparison `labute_GQ2_maxPro2_marked` (`pro2Map_loc`, `pro2Map_loc_surjective`, `pro2Map_loc_nu`); * `nu := ν_loc` — the common unramified character through which both factor.FQ2Presentation.BoundaryFrame YtgQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GQ2 (Q2Presentation.TorsorProgram.quotientFramedTarget Yt E.N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame Yt E.N ⋯ ⋯ F)) ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).∀ (f₀Q2Presentation.TorsorProgram.liftHom Yt E.N ⋯ ⋯ Q2Presentation.boundaryPackage_GQ2 F g: Q2Presentation.TorsorProgram.liftHomQ2Presentation.TorsorProgram.liftHom (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (F : Q2Presentation.BoundaryFrame Yt) (g : Q2Presentation.boundaryFramedSurj B (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ) (Q2Presentation.TorsorProgram.quotientFrame Yt N hNLY hNθ F)) : Type**All framed lifts** of a child-framed surjection (surjectivity NOT imposed; the Frattini argument recovers it per use-site).YtQ2Presentation.BoundaryFramedTargetEQ2Presentation.Lifting.ElementaryKernel Yt.NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ Q2Presentation.boundaryPackage_GQ2Q2Presentation.boundaryPackage_GQ2 : Q2Presentation.BoundaryPackage Q2Presentation.GQ2Profinite**The local boundary package** `boundaryPackage_GQ2 : BoundaryPackage G_{ℚ₂}` (manuscript Prop 3.14 `prop:compatiblemarking` for `Γ = G_{ℚ₂}`; plan Turn 4 §6), the `G_{ℚ₂}`-side instance of the uniform Stage-C boundary datum. * `tameMap`/`tame_surj`/`tame_nu` — the local tame quotient `G_{ℚ₂} ↠ T_A` with unramified marking `ν_loc`, from the axiom `gq2_tame_quotient` (Prop 3.2 + the local half of Prop `compatiblemarking`); * `pro2Map`/`pro2_surj`/`pro2_nu` — the local maximal pro-`2` quotient `G_{ℚ₂} ↠ Π` with the *same* unramified marking `ν_loc`, proved from the fully marked Labute comparison `labute_GQ2_maxPro2_marked` (`pro2Map_loc`, `pro2Map_loc_surjective`, `pro2Map_loc_nu`); * `nu := ν_loc` — the common unramified character through which both factor.FQ2Presentation.BoundaryFrame YtgQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GQ2 (Q2Presentation.TorsorProgram.quotientFramedTarget Yt E.N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame Yt E.N ⋯ ⋯ F)), Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.TorsorProgram.Z1Q2Presentation.TorsorProgram.Z1 (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (F : Q2Presentation.BoundaryFrame Yt) (g : Q2Presentation.boundaryFramedSurj B (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ) (Q2Presentation.TorsorProgram.quotientFrame Yt N hNLY hNθ F)) (f₀ : Q2Presentation.TorsorProgram.liftHom Yt N hNLY hNθ B F g) : Type**The twisted cocycle set** relative to a base lift.YtQ2Presentation.BoundaryFramedTargetEQ2Presentation.Lifting.ElementaryKernel Yt.NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ Q2Presentation.boundaryPackage_GQ2Q2Presentation.boundaryPackage_GQ2 : Q2Presentation.BoundaryPackage Q2Presentation.GQ2Profinite**The local boundary package** `boundaryPackage_GQ2 : BoundaryPackage G_{ℚ₂}` (manuscript Prop 3.14 `prop:compatiblemarking` for `Γ = G_{ℚ₂}`; plan Turn 4 §6), the `G_{ℚ₂}`-side instance of the uniform Stage-C boundary datum. * `tameMap`/`tame_surj`/`tame_nu` — the local tame quotient `G_{ℚ₂} ↠ T_A` with unramified marking `ν_loc`, from the axiom `gq2_tame_quotient` (Prop 3.2 + the local half of Prop `compatiblemarking`); * `pro2Map`/`pro2_surj`/`pro2_nu` — the local maximal pro-`2` quotient `G_{ℚ₂} ↠ Π` with the *same* unramified marking `ν_loc`, proved from the fully marked Labute comparison `labute_GQ2_maxPro2_marked` (`pro2Map_loc`, `pro2Map_loc_surjective`, `pro2Map_loc_nu`); * `nu := ν_loc` — the common unramified character through which both factor.FQ2Presentation.BoundaryFrame YtgQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GQ2 (Q2Presentation.TorsorProgram.quotientFramedTarget Yt E.N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame Yt E.N ⋯ ⋯ F)f₀Q2Presentation.TorsorProgram.liftHom Yt E.N ⋯ ⋯ Q2Presentation.boundaryPackage_GQ2 F g) =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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt) ^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`.2theorem Q2Presentation.Induction.q2_localduality {Yt
Q2Presentation.BoundaryFramedTarget: Q2Presentation.BoundaryFramedTargetQ2Presentation.BoundaryFramedTarget : Type 1A **boundary-framed marked target** `𝒴 = (Y, L_Y, π_Y, θ_Y)` (manuscript Definition 4.1, `def:framed`): a finite group `Y` with a normal finite `2`-subgroup `L_Y`, a surjection `π_Y : Y ↠ H` onto a finite *tame* quotient with kernel exactly `L_Y`, and an *elementary decoration* `θ_Y : Y → Multiplicative E` into the multiplicative image of a finite `𝔽₂`-vector space `E`. The pair `q_Y = (π_Y, θ_Y)` fixes both the tame quotient `Y / L_Y ≅ H` and the decoration.} (EQ2Presentation.Lifting.ElementaryKernel Yt: Q2Presentation.Lifting.ElementaryKernelQ2Presentation.Lifting.ElementaryKernel (Yt : Q2Presentation.BoundaryFramedTarget) : TypeA normal subgroup of a framed target that is killed by the decoration, contained in the wild kernel, **abelian**, and of **exponent 2** — the shape of the chief kernels the cochain keeps quantify over.YtQ2Presentation.BoundaryFramedTarget) (FQ2Presentation.BoundaryFrame Yt: Q2Presentation.BoundaryFrameQ2Presentation.BoundaryFrame (Yt : Q2Presentation.BoundaryFramedTarget) : TypeA **boundary frame** on a boundary-framed target `𝒴` (manuscript `eq:beta`): the fixed compatible data `α : 𝕋_tame ↠ H`, `ψ : Π → Multiplicative E`, and the induced `β : ∂_bd → H × Multiplicative E`. Surjectivity of `α` records that `H` really is a tame quotient (manuscript: "Fix a finite tame quotient `H`, an epimorphism `α : 𝕋_A ↠ H`").YtQ2Presentation.BoundaryFramedTarget) (hinv∀ (f : Module.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)), (∀ (y : Yt.Y) (m : Q2Presentation.Lifting.NAdd E), f ((Q2Presentation.Lifting.conjEndN E y) m) = f m) → f = 0: ∀ (fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E): Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) (Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt)), (∀ (yYt.Y: YtQ2Presentation.BoundaryFramedTarget.YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.) (mQ2Presentation.Lifting.NAdd E: Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt), fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)((Q2Presentation.Lifting.conjEndNQ2Presentation.Lifting.conjEndN {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) (y : Yt.Y) : Module.End (ZMod 2) (Q2Presentation.Lifting.NAdd E)Right conjugation by `y` as an `F₂`-linear endomorphism of `N`.EQ2Presentation.Lifting.ElementaryKernel YtyYt.Y) mQ2Presentation.Lifting.NAdd E) =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`.fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)mQ2Presentation.Lifting.NAdd E) → fModule.Dual (ZMod 2) (Q2Presentation.Lifting.NAdd E)=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) (gQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GQ2 (Q2Presentation.TorsorProgram.quotientFramedTarget Yt E.N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame Yt E.N ⋯ ⋯ F): Q2Presentation.boundaryFramedSurjQ2Presentation.boundaryFramedSurj {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (Yt : Q2Presentation.BoundaryFramedTarget) (F : Q2Presentation.BoundaryFrame Yt) : TypeThe **boundary-framed surjections** `e_Γ^β(𝒴)` (manuscript `eq:eGamma`): the continuous surjections `f : Γ ↠ Y` whose induced map to `H × E` is the prescribed `β ∘ b_Γ`, i.e. `q_Y ∘ f = β ∘ b_Γ`. This is the subtype counted in Theorem 4.2; its cardinality is `e_Γ^β(𝒴)`.Q2Presentation.boundaryPackage_GQ2Q2Presentation.boundaryPackage_GQ2 : Q2Presentation.BoundaryPackage Q2Presentation.GQ2Profinite**The local boundary package** `boundaryPackage_GQ2 : BoundaryPackage G_{ℚ₂}` (manuscript Prop 3.14 `prop:compatiblemarking` for `Γ = G_{ℚ₂}`; plan Turn 4 §6), the `G_{ℚ₂}`-side instance of the uniform Stage-C boundary datum. * `tameMap`/`tame_surj`/`tame_nu` — the local tame quotient `G_{ℚ₂} ↠ T_A` with unramified marking `ν_loc`, from the axiom `gq2_tame_quotient` (Prop 3.2 + the local half of Prop `compatiblemarking`); * `pro2Map`/`pro2_surj`/`pro2_nu` — the local maximal pro-`2` quotient `G_{ℚ₂} ↠ Π` with the *same* unramified marking `ν_loc`, proved from the fully marked Labute comparison `labute_GQ2_maxPro2_marked` (`pro2Map_loc`, `pro2Map_loc_surjective`, `pro2Map_loc_nu`); * `nu := ν_loc` — the common unramified character through which both factor.(Q2Presentation.TorsorProgram.quotientFramedTargetQ2Presentation.TorsorProgram.quotientFramedTarget (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) : Q2Presentation.BoundaryFramedTarget**The quotient framed target** `Y/N` (same `H`, same `E`, image wild kernel).YtQ2Presentation.BoundaryFramedTargetEQ2Presentation.Lifting.ElementaryKernel Yt.NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrameQ2Presentation.TorsorProgram.quotientFrame (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) (F : Q2Presentation.BoundaryFrame Yt) : Q2Presentation.BoundaryFrame (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ)The frame transports verbatim (`H`, `E`, `α`, `ψ`, `β` unchanged).YtQ2Presentation.BoundaryFramedTargetEQ2Presentation.Lifting.ElementaryKernel Yt.NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ FQ2Presentation.BoundaryFrame Yt)) : NonemptyNonempty.{u} (α : Sort u) : Prop`Nonempty α` is a typeclass that says that `α` is not an empty type, that is, there exists an element in the type. It differs from `Inhabited α` in that `Nonempty α` is a `Prop`, which means that it does not actually carry an element of `α`, only a proof that *there exists* such an element. Given `Nonempty α`, you can construct an element of `α` *nonconstructively* using `Classical.choice`.(Q2Presentation.TorsorProgram.liftHomQ2Presentation.TorsorProgram.liftHom (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (F : Q2Presentation.BoundaryFrame Yt) (g : Q2Presentation.boundaryFramedSurj B (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ) (Q2Presentation.TorsorProgram.quotientFrame Yt N hNLY hNθ F)) : Type**All framed lifts** of a child-framed surjection (surjectivity NOT imposed; the Frattini argument recovers it per use-site).YtQ2Presentation.BoundaryFramedTargetEQ2Presentation.Lifting.ElementaryKernel Yt.NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ Q2Presentation.boundaryPackage_GQ2Q2Presentation.boundaryPackage_GQ2 : Q2Presentation.BoundaryPackage Q2Presentation.GQ2Profinite**The local boundary package** `boundaryPackage_GQ2 : BoundaryPackage G_{ℚ₂}` (manuscript Prop 3.14 `prop:compatiblemarking` for `Γ = G_{ℚ₂}`; plan Turn 4 §6), the `G_{ℚ₂}`-side instance of the uniform Stage-C boundary datum. * `tameMap`/`tame_surj`/`tame_nu` — the local tame quotient `G_{ℚ₂} ↠ T_A` with unramified marking `ν_loc`, from the axiom `gq2_tame_quotient` (Prop 3.2 + the local half of Prop `compatiblemarking`); * `pro2Map`/`pro2_surj`/`pro2_nu` — the local maximal pro-`2` quotient `G_{ℚ₂} ↠ Π` with the *same* unramified marking `ν_loc`, proved from the fully marked Labute comparison `labute_GQ2_maxPro2_marked` (`pro2Map_loc`, `pro2Map_loc_surjective`, `pro2Map_loc_nu`); * `nu := ν_loc` — the common unramified character through which both factor.FQ2Presentation.BoundaryFrame YtgQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GQ2 (Q2Presentation.TorsorProgram.quotientFramedTarget Yt E.N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame Yt E.N ⋯ ⋯ F)) ∧And (a b : Prop) : Prop`And a b`, or `a ∧ b`, is the conjunction of propositions. It can be constructed and destructed like a pair: if `ha : a` and `hb : b` then `⟨ha, hb⟩ : a ∧ b`, and if `h : a ∧ b` then `h.left : a` and `h.right : b`. Conventions for notations in identifiers: * The recommended spelling of `∧` in identifiers is `and`. * The recommended spelling of `/\` in identifiers is `and` (prefer `∧` over `/\`).∀ (f₀Q2Presentation.TorsorProgram.liftHom Yt E.N ⋯ ⋯ Q2Presentation.boundaryPackage_GQ2 F g: Q2Presentation.TorsorProgram.liftHomQ2Presentation.TorsorProgram.liftHom (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (F : Q2Presentation.BoundaryFrame Yt) (g : Q2Presentation.boundaryFramedSurj B (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ) (Q2Presentation.TorsorProgram.quotientFrame Yt N hNLY hNθ F)) : Type**All framed lifts** of a child-framed surjection (surjectivity NOT imposed; the Frattini argument recovers it per use-site).YtQ2Presentation.BoundaryFramedTargetEQ2Presentation.Lifting.ElementaryKernel Yt.NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ Q2Presentation.boundaryPackage_GQ2Q2Presentation.boundaryPackage_GQ2 : Q2Presentation.BoundaryPackage Q2Presentation.GQ2Profinite**The local boundary package** `boundaryPackage_GQ2 : BoundaryPackage G_{ℚ₂}` (manuscript Prop 3.14 `prop:compatiblemarking` for `Γ = G_{ℚ₂}`; plan Turn 4 §6), the `G_{ℚ₂}`-side instance of the uniform Stage-C boundary datum. * `tameMap`/`tame_surj`/`tame_nu` — the local tame quotient `G_{ℚ₂} ↠ T_A` with unramified marking `ν_loc`, from the axiom `gq2_tame_quotient` (Prop 3.2 + the local half of Prop `compatiblemarking`); * `pro2Map`/`pro2_surj`/`pro2_nu` — the local maximal pro-`2` quotient `G_{ℚ₂} ↠ Π` with the *same* unramified marking `ν_loc`, proved from the fully marked Labute comparison `labute_GQ2_maxPro2_marked` (`pro2Map_loc`, `pro2Map_loc_surjective`, `pro2Map_loc_nu`); * `nu := ν_loc` — the common unramified character through which both factor.FQ2Presentation.BoundaryFrame YtgQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GQ2 (Q2Presentation.TorsorProgram.quotientFramedTarget Yt E.N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame Yt E.N ⋯ ⋯ F)), Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.TorsorProgram.Z1Q2Presentation.TorsorProgram.Z1 (Yt : Q2Presentation.BoundaryFramedTarget) (N : Subgroup Yt.Y) [hNn : N.Normal] (hNLY : N ≤ Yt.LY) (hNθ : ∀ n ∈ N, Yt.thetaY n = 1) {Γ : ProfiniteGrp.{0}} (B : Q2Presentation.BoundaryPackage Γ) (F : Q2Presentation.BoundaryFrame Yt) (g : Q2Presentation.boundaryFramedSurj B (Q2Presentation.TorsorProgram.quotientFramedTarget Yt N hNLY hNθ) (Q2Presentation.TorsorProgram.quotientFrame Yt N hNLY hNθ F)) (f₀ : Q2Presentation.TorsorProgram.liftHom Yt N hNLY hNθ B F g) : Type**The twisted cocycle set** relative to a base lift.YtQ2Presentation.BoundaryFramedTargetEQ2Presentation.Lifting.ElementaryKernel Yt.NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget} (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y⋯ ⋯ Q2Presentation.boundaryPackage_GQ2Q2Presentation.boundaryPackage_GQ2 : Q2Presentation.BoundaryPackage Q2Presentation.GQ2Profinite**The local boundary package** `boundaryPackage_GQ2 : BoundaryPackage G_{ℚ₂}` (manuscript Prop 3.14 `prop:compatiblemarking` for `Γ = G_{ℚ₂}`; plan Turn 4 §6), the `G_{ℚ₂}`-side instance of the uniform Stage-C boundary datum. * `tameMap`/`tame_surj`/`tame_nu` — the local tame quotient `G_{ℚ₂} ↠ T_A` with unramified marking `ν_loc`, from the axiom `gq2_tame_quotient` (Prop 3.2 + the local half of Prop `compatiblemarking`); * `pro2Map`/`pro2_surj`/`pro2_nu` — the local maximal pro-`2` quotient `G_{ℚ₂} ↠ Π` with the *same* unramified marking `ν_loc`, proved from the fully marked Labute comparison `labute_GQ2_maxPro2_marked` (`pro2Map_loc`, `pro2Map_loc_surjective`, `pro2Map_loc_nu`); * `nu := ν_loc` — the common unramified character through which both factor.FQ2Presentation.BoundaryFrame YtgQ2Presentation.boundaryFramedSurj Q2Presentation.boundaryPackage_GQ2 (Q2Presentation.TorsorProgram.quotientFramedTarget Yt E.N ⋯ ⋯) (Q2Presentation.TorsorProgram.quotientFrame Yt E.N ⋯ ⋯ F)f₀Q2Presentation.TorsorProgram.liftHom Yt E.N ⋯ ⋯ Q2Presentation.boundaryPackage_GQ2 F g) =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`.Nat.cardNat.card.{u_3} (α : Type u_3) : ℕ`Nat.card α` is the cardinality of `α` as a natural number. If `α` is infinite, `Nat.card α = 0`.(Q2Presentation.Lifting.NAddQ2Presentation.Lifting.NAdd {Yt : Q2Presentation.BoundaryFramedTarget} (E : Q2Presentation.Lifting.ElementaryKernel Yt) : TypeThe additive `F₂`-carrier of an elementary kernel.EQ2Presentation.Lifting.ElementaryKernel Yt) ^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`.2**`prop:localduality` at vanishing invariants** (the historical keep statement, now DERIVED from the general form): with no nonzero invariant duals the obstruction space is trivial, so framed lifts always exist and the count degenerates to `|N|²`.
-
theoremdefined in Q2Presentation/Local/Cohomology.leancomplete
theorem Q2Presentation.Local.q2_local_Z1_dim (A
Q2Presentation.Local.FiniteDiscreteRep Q2Presentation.GQ2Profinite: Q2Presentation.Local.FiniteDiscreteRepQ2Presentation.Local.FiniteDiscreteRep.{u_1} (Γ : ProfiniteGrp.{u_1}) : Type (max 1 u_1)A **finite discrete `F₂[Γ]`-module**: a finite-dimensional `F₂`-vector space `V` with a continuous (locally constant) `Γ`-action `ρ`. Because `V` is finite and discrete, "continuous action" means `g ↦ ρ g` is locally constant, i.e. the action factors through a finite quotient of the profinite group `Γ`.Q2Presentation.GQ2ProfiniteQ2Presentation.GQ2Profinite : ProfiniteGrp.{0}The absolute Galois group `G_{ℚ₂} = Gal(Q̄₂/ℚ₂)` of the `2`-adic field `ℚ₂ = ℚ_[2]`, as a profinite group. Concretely it is `Gal(SeparableClosure ℚ_[2] / ℚ_[2])`, packaged as an object of `ProfiniteGrp` by `InfiniteGalois.profiniteGalGrp`. Since `ℚ_[2]` has characteristic `0` its separable closure is an algebraic closure, so this is the absolute Galois group in the usual sense, matching the manuscript's `G_{ℚ₂}`.) : Module.finrankModule.finrank.{u_1, u_2} (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] : ℕThe rank of a module as a natural number. For a finite-dimensional vector space `V` over a field `k`, `Module.finrank k V` is equal to the dimension of `V` over `k`. For a general module `M` over a ring `R`, `Module.finrank R M` is defined to be the supremum of the cardinalities of the `R`-linearly independent subsets of `M`, if this supremum is finite. It is defined by convention to be `0` if this supremum is infinite. See `Module.rank` for a cardinal-valued version where infinite rank modules have rank an infinite cardinal. Note that if `R` is not a field then there can exist modules `M` with `¬(Module.Finite R M)` but `finrank R M ≠ 0`. For example `ℚ` has `finrank` equal to `1` over `ℤ`, because the nonempty `ℤ`-linearly independent subsets of `ℚ` are precisely the nonzero singletons.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) ↥AQ2Presentation.Local.FiniteDiscreteRep Q2Presentation.GQ2Profinite.Z1Q2Presentation.Local.FiniteDiscreteRep.Z1.{u_1} {Γ : ProfiniteGrp.{u_1}} (A : Q2Presentation.Local.FiniteDiscreteRep Γ) : Submodule (ZMod 2) (↑Γ.toProfinite.toTop → A.V)`Z¹_{F,ρ}(A) = ker d¹ ∩ C¹_cont`, the continuous `1`-cocycles.=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`.2 *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`.Module.finrankModule.finrank.{u_1, u_2} (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] : ℕThe rank of a module as a natural number. For a finite-dimensional vector space `V` over a field `k`, `Module.finrank k V` is equal to the dimension of `V` over `k`. For a general module `M` over a ring `R`, `Module.finrank R M` is defined to be the supremum of the cardinalities of the `R`-linearly independent subsets of `M`, if this supremum is finite. It is defined by convention to be `0` if this supremum is infinite. See `Module.rank` for a cardinal-valued version where infinite rank modules have rank an infinite cardinal. Note that if `R` is not a field then there can exist modules `M` with `¬(Module.Finite R M)` but `finrank R M ≠ 0`. For example `ℚ` has `finrank` equal to `1` over `ℤ`, because the nonempty `ℤ`-linearly independent subsets of `ℚ` are precisely the nonzero singletons.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AQ2Presentation.Local.FiniteDiscreteRep Q2Presentation.GQ2Profinite.VQ2Presentation.Local.FiniteDiscreteRep.V.{u_1} {Γ : ProfiniteGrp.{u_1}} (self : Q2Presentation.Local.FiniteDiscreteRep Γ) : Typethe underlying `F₂`-vector space+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`.Module.finrankModule.finrank.{u_1, u_2} (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] : ℕThe rank of a module as a natural number. For a finite-dimensional vector space `V` over a field `k`, `Module.finrank k V` is equal to the dimension of `V` over `k`. For a general module `M` over a ring `R`, `Module.finrank R M` is defined to be the supremum of the cardinalities of the `R`-linearly independent subsets of `M`, if this supremum is finite. It is defined by convention to be `0` if this supremum is infinite. See `Module.rank` for a cardinal-valued version where infinite rank modules have rank an infinite cardinal. Note that if `R` is not a field then there can exist modules `M` with `¬(Module.Finite R M)` but `finrank R M ≠ 0`. For example `ℚ` has `finrank` equal to `1` over `ℤ`, because the nonempty `ℤ`-linearly independent subsets of `ℚ` are precisely the nonzero singletons.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) ↥AQ2Presentation.Local.FiniteDiscreteRep Q2Presentation.GQ2Profinite.dualQ2Presentation.Local.FiniteDiscreteRep.dual.{u_1} {Γ : ProfiniteGrp.{u_1}} (A : Q2Presentation.Local.FiniteDiscreteRep Γ) : Q2Presentation.Local.FiniteDiscreteRep ΓThe contragredient module `A∨ = Hom_{F₂}(A, F₂)` with the dual `Γ`-action `(g·φ) = φ ∘ ρ(g⁻¹)`. Over `F₂` the cyclotomic twist `μ₂` is trivial, so this is the `A^∨(1)` appearing in Tate duality..Hcont0Q2Presentation.Local.FiniteDiscreteRep.Hcont0.{u_1} {Γ : ProfiniteGrp.{u_1}} (A : Q2Presentation.Local.FiniteDiscreteRep Γ) : Submodule (ZMod 2) A.V**`H⁰_{F,ρ}(A) = ker d⁰`**, the continuous `0`-cohomology.theorem Q2Presentation.Local.q2_local_Z1_dim (A
Q2Presentation.Local.FiniteDiscreteRep Q2Presentation.GQ2Profinite: Q2Presentation.Local.FiniteDiscreteRepQ2Presentation.Local.FiniteDiscreteRep.{u_1} (Γ : ProfiniteGrp.{u_1}) : Type (max 1 u_1)A **finite discrete `F₂[Γ]`-module**: a finite-dimensional `F₂`-vector space `V` with a continuous (locally constant) `Γ`-action `ρ`. Because `V` is finite and discrete, "continuous action" means `g ↦ ρ g` is locally constant, i.e. the action factors through a finite quotient of the profinite group `Γ`.Q2Presentation.GQ2ProfiniteQ2Presentation.GQ2Profinite : ProfiniteGrp.{0}The absolute Galois group `G_{ℚ₂} = Gal(Q̄₂/ℚ₂)` of the `2`-adic field `ℚ₂ = ℚ_[2]`, as a profinite group. Concretely it is `Gal(SeparableClosure ℚ_[2] / ℚ_[2])`, packaged as an object of `ProfiniteGrp` by `InfiniteGalois.profiniteGalGrp`. Since `ℚ_[2]` has characteristic `0` its separable closure is an algebraic closure, so this is the absolute Galois group in the usual sense, matching the manuscript's `G_{ℚ₂}`.) : Module.finrankModule.finrank.{u_1, u_2} (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] : ℕThe rank of a module as a natural number. For a finite-dimensional vector space `V` over a field `k`, `Module.finrank k V` is equal to the dimension of `V` over `k`. For a general module `M` over a ring `R`, `Module.finrank R M` is defined to be the supremum of the cardinalities of the `R`-linearly independent subsets of `M`, if this supremum is finite. It is defined by convention to be `0` if this supremum is infinite. See `Module.rank` for a cardinal-valued version where infinite rank modules have rank an infinite cardinal. Note that if `R` is not a field then there can exist modules `M` with `¬(Module.Finite R M)` but `finrank R M ≠ 0`. For example `ℚ` has `finrank` equal to `1` over `ℤ`, because the nonempty `ℤ`-linearly independent subsets of `ℚ` are precisely the nonzero singletons.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) ↥AQ2Presentation.Local.FiniteDiscreteRep Q2Presentation.GQ2Profinite.Z1Q2Presentation.Local.FiniteDiscreteRep.Z1.{u_1} {Γ : ProfiniteGrp.{u_1}} (A : Q2Presentation.Local.FiniteDiscreteRep Γ) : Submodule (ZMod 2) (↑Γ.toProfinite.toTop → A.V)`Z¹_{F,ρ}(A) = ker d¹ ∩ C¹_cont`, the continuous `1`-cocycles.=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`.2 *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`.Module.finrankModule.finrank.{u_1, u_2} (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] : ℕThe rank of a module as a natural number. For a finite-dimensional vector space `V` over a field `k`, `Module.finrank k V` is equal to the dimension of `V` over `k`. For a general module `M` over a ring `R`, `Module.finrank R M` is defined to be the supremum of the cardinalities of the `R`-linearly independent subsets of `M`, if this supremum is finite. It is defined by convention to be `0` if this supremum is infinite. See `Module.rank` for a cardinal-valued version where infinite rank modules have rank an infinite cardinal. Note that if `R` is not a field then there can exist modules `M` with `¬(Module.Finite R M)` but `finrank R M ≠ 0`. For example `ℚ` has `finrank` equal to `1` over `ℤ`, because the nonempty `ℤ`-linearly independent subsets of `ℚ` are precisely the nonzero singletons.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) AQ2Presentation.Local.FiniteDiscreteRep Q2Presentation.GQ2Profinite.VQ2Presentation.Local.FiniteDiscreteRep.V.{u_1} {Γ : ProfiniteGrp.{u_1}} (self : Q2Presentation.Local.FiniteDiscreteRep Γ) : Typethe underlying `F₂`-vector space+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`.Module.finrankModule.finrank.{u_1, u_2} (R : Type u_1) (M : Type u_2) [Semiring R] [AddCommMonoid M] [Module R M] : ℕThe rank of a module as a natural number. For a finite-dimensional vector space `V` over a field `k`, `Module.finrank k V` is equal to the dimension of `V` over `k`. For a general module `M` over a ring `R`, `Module.finrank R M` is defined to be the supremum of the cardinalities of the `R`-linearly independent subsets of `M`, if this supremum is finite. It is defined by convention to be `0` if this supremum is infinite. See `Module.rank` for a cardinal-valued version where infinite rank modules have rank an infinite cardinal. Note that if `R` is not a field then there can exist modules `M` with `¬(Module.Finite R M)` but `finrank R M ≠ 0`. For example `ℚ` has `finrank` equal to `1` over `ℤ`, because the nonempty `ℤ`-linearly independent subsets of `ℚ` are precisely the nonzero singletons.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) ↥AQ2Presentation.Local.FiniteDiscreteRep Q2Presentation.GQ2Profinite.dualQ2Presentation.Local.FiniteDiscreteRep.dual.{u_1} {Γ : ProfiniteGrp.{u_1}} (A : Q2Presentation.Local.FiniteDiscreteRep Γ) : Q2Presentation.Local.FiniteDiscreteRep ΓThe contragredient module `A∨ = Hom_{F₂}(A, F₂)` with the dual `Γ`-action `(g·φ) = φ ∘ ρ(g⁻¹)`. Over `F₂` the cyclotomic twist `μ₂` is trivial, so this is the `A^∨(1)` appearing in Tate duality..Hcont0Q2Presentation.Local.FiniteDiscreteRep.Hcont0.{u_1} {Γ : ProfiniteGrp.{u_1}} (A : Q2Presentation.Local.FiniteDiscreteRep Γ) : Submodule (ZMod 2) A.V**`H⁰_{F,ρ}(A) = ker d⁰`**, the continuous `0`-cohomology.**The local cocycle-dimension formula** `dim Z¹_{F,ρ}(A) = 2·dim A + dim (A^∨)^C` (`prop:localduality`, `eq:localobdual`). This is the local half of the numerical agreement of `cor:adjointboundary`: it matches the candidate `dim Z¹_{A,ρ}(A)`. Proof: `dim Z¹ = dim H¹ + dim B¹` (`Z¹/B¹ = H¹`, both finite), `dim B¹ = dim A − dim H⁰` (rank–nullity for `d⁰`), `dim H¹ = dim H⁰ + dim H² + dim A` (Euler–Poincaré), and `dim H² = dim (A^∨)^C` (Tate duality, `q2_local_dim_duality_H2`). Combining gives `dim Z¹ = dim H² + 2·dim A`.
-
Q2Presentation.Lifting.connectingMap[complete] -
Q2Presentation.Lifting.IsAdjointBoundary[complete] -
Q2Presentation.Lifting.isAdjointBoundary_unique[complete]
Corollary 5.17 of the paper (Common lift numerics and adjoint boundaries).
For either source, use the corresponding notation H^i_{\Gamma,\rho} and Z^1_{\Gamma,\rho}. Then the obstruction-space dimensions, unobstructed lift multiplicities, and perfect pairings agree numerically.
For every short exact sequence
0\to T\to M\to V\to0
and its dual, the connecting maps are adjoint: if
\partial_{\Gamma,\rho}:H^1_{\Gamma,\rho}(V)\to H^2_{\Gamma,\rho}(T)
and \chi\in(T^\vee)^C has dual boundary
\gamma_\chi=\partial_C^\vee(\chi)\in H^1(C,V^\vee),
then
\langle\partial_{\Gamma,\rho}c,\chi\rangle =\langle c,\rho^*\gamma_\chi\rangle_\Gamma.
Lean code for Corollary5.14●3 declarations
Associated Lean declarations
-
Q2Presentation.Lifting.connectingMap[complete]
-
Q2Presentation.Lifting.IsAdjointBoundary[complete]
-
Q2Presentation.Lifting.isAdjointBoundary_unique[complete]
-
Q2Presentation.Lifting.connectingMap[complete] -
Q2Presentation.Lifting.IsAdjointBoundary[complete] -
Q2Presentation.Lifting.isAdjointBoundary_unique[complete]
-
defdefined in Q2Presentation/Lifting/Duality.leancomplete
def Q2Presentation.Lifting.connectingMap.{u_2, u_3, u_4, u_5, u_6, u_7} {T4
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {T2Type u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {M4Type u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {M2Type u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {V4Type u_6: Type u_6A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {V2Type u_7: Type u_7A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.T4Type u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) T4Type u_2] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.T2Type u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) T2Type u_3] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.M4Type u_4] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) M4Type u_4] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.M2Type u_5] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) M2Type u_5] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.V4Type u_6] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V4Type u_6] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.V2Type u_7] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V2Type u_7] (dTT4 →ₗ[ZMod 2] T2: T4Type u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.T2Type u_3) (dMM4 →ₗ[ZMod 2] M2: M4Type u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M2Type u_5) (dVV4 →ₗ[ZMod 2] V2: V4Type u_6→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V2Type u_7) (i4T4 →ₗ[ZMod 2] M4: T4Type u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M4Type u_4) (p4M4 →ₗ[ZMod 2] V4: M4Type u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V4Type u_6) (i2T2 →ₗ[ZMod 2] M2: T2Type u_3→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M2Type u_5) (p2M2 →ₗ[ZMod 2] V2: M2Type u_5→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V2Type u_7) (hi2Function.Injective ⇑i2: Function.InjectiveFunction.Injective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called injective if `f x = f y` implies `x = y`.⇑i2T2 →ₗ[ZMod 2] M2) (hex2p2.ker = i2.range: p2M2 →ₗ[ZMod 2] V2.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.=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`.i2T2 →ₗ[ZMod 2] M2.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern].) (hnatV∀ (m : M4), p2 (dM m) = dV (p4 m): ∀ (mM4: M4Type u_4), p2M2 →ₗ[ZMod 2] V2(dMM4 →ₗ[ZMod 2] M2mM4) =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`.dVV4 →ₗ[ZMod 2] V2(p4M4 →ₗ[ZMod 2] V4mM4)) (hp4Function.Surjective ⇑p4: Function.SurjectiveFunction.Surjective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called surjective if every `b : β` is equal to `f a` for some `a : α`.⇑p4M4 →ₗ[ZMod 2] V4) (hex4p4.ker = i4.range: p4M4 →ₗ[ZMod 2] V4.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.=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`.i4T4 →ₗ[ZMod 2] M4.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern].) (hnatM∀ (w : T4), dM (i4 w) = i2 (dT w): ∀ (wT4: T4Type u_2), dMM4 →ₗ[ZMod 2] M2(i4T4 →ₗ[ZMod 2] M4wT4) =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`.i2T2 →ₗ[ZMod 2] M2(dTT4 →ₗ[ZMod 2] T2wT4)) : ↥dVV4 →ₗ[ZMod 2] V2.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.T2Type u_3⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.dTT4 →ₗ[ZMod 2] T2.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern].def Q2Presentation.Lifting.connectingMap.{u_2, u_3, u_4, u_5, u_6, u_7} {T4
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {T2Type u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {M4Type u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {M2Type u_5: Type u_5A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {V4Type u_6: Type u_6A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {V2Type u_7: Type u_7A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.T4Type u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) T4Type u_2] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.T2Type u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) T2Type u_3] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.M4Type u_4] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) M4Type u_4] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.M2Type u_5] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) M2Type u_5] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.V4Type u_6] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V4Type u_6] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.V2Type u_7] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) V2Type u_7] (dTT4 →ₗ[ZMod 2] T2: T4Type u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.T2Type u_3) (dMM4 →ₗ[ZMod 2] M2: M4Type u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M2Type u_5) (dVV4 →ₗ[ZMod 2] V2: V4Type u_6→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V2Type u_7) (i4T4 →ₗ[ZMod 2] M4: T4Type u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M4Type u_4) (p4M4 →ₗ[ZMod 2] V4: M4Type u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V4Type u_6) (i2T2 →ₗ[ZMod 2] M2: T2Type u_3→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.M2Type u_5) (p2M2 →ₗ[ZMod 2] V2: M2Type u_5→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.V2Type u_7) (hi2Function.Injective ⇑i2: Function.InjectiveFunction.Injective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called injective if `f x = f y` implies `x = y`.⇑i2T2 →ₗ[ZMod 2] M2) (hex2p2.ker = i2.range: p2M2 →ₗ[ZMod 2] V2.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.=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`.i2T2 →ₗ[ZMod 2] M2.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern].) (hnatV∀ (m : M4), p2 (dM m) = dV (p4 m): ∀ (mM4: M4Type u_4), p2M2 →ₗ[ZMod 2] V2(dMM4 →ₗ[ZMod 2] M2mM4) =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`.dVV4 →ₗ[ZMod 2] V2(p4M4 →ₗ[ZMod 2] V4mM4)) (hp4Function.Surjective ⇑p4: Function.SurjectiveFunction.Surjective.{u_1, u_2} {α : Sort u_1} {β : Sort u_2} (f : α → β) : PropA function `f : α → β` is called surjective if every `b : β` is equal to `f a` for some `a : α`.⇑p4M4 →ₗ[ZMod 2] V4) (hex4p4.ker = i4.range: p4M4 →ₗ[ZMod 2] V4.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.=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`.i4T4 →ₗ[ZMod 2] M4.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern].) (hnatM∀ (w : T4), dM (i4 w) = i2 (dT w): ∀ (wT4: T4Type u_2), dMM4 →ₗ[ZMod 2] M2(i4T4 →ₗ[ZMod 2] M4wT4) =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`.i2T2 →ₗ[ZMod 2] M2(dTT4 →ₗ[ZMod 2] T2wT4)) : ↥dVV4 →ₗ[ZMod 2] V2.kerLinearMap.ker.{u_1, u_2, u_5, u_7} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_7} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} (f : M →ₛₗ[τ₁₂] M₂) : Submodule R MThe kernel of a linear map `f : M → M₂` is defined to be `comap f ⊥`. This is equivalent to the set of `x : M` such that `f x = 0`. The kernel is a submodule of `M`.→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.T2Type u_3⧸HasQuotient.Quotient.{u, v} (A : outParam (Type u)) {B : Type v} [self : HasQuotient A B] : B → Type (max u v)`HasQuotient.Quotient A b` (denoted as `A ⧸ b`) is the quotient of the type `A` by `b`. This differs from `HasQuotient.quotient'` in that the `A` argument is explicit, which is necessary to make Lean show the notation in the goal state.dTT4 →ₗ[ZMod 2] T2.rangeLinearMap.range.{u_1, u_2, u_5, u_6} {R : Type u_1} {R₂ : Type u_2} {M : Type u_5} {M₂ : Type u_6} [Semiring R] [Semiring R₂] [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module R₂ M₂] {τ₁₂ : R →+* R₂} [RingHomSurjective τ₁₂] (f : M →ₛₗ[τ₁₂] M₂) : Submodule R₂ M₂The range of a linear map `f : M → M₂` is a submodule of `M₂`. See Note [range copy pattern].**The candidate connecting homomorphism** `∂_{Γ,ρ} : Z¹_{Γ,ρ}(V) → H²_{Γ,ρ}(T)` (`cor:adjointboundary`, l.2005), the snake map of the degreewise-short-exact sequence of word complexes `0 → C(T) → C(M) → C(V) → 0` (`lem:exactcoefffunctor`, eq:coneshortexact). On a `V`-cocycle `c`, lift to `m̃ ∈ M⁴` with `p₄ m̃ = c`; then `d¹_M m̃ = i₂ t` for a unique `t ∈ T²`, and `∂c = [t] ∈ H²(T)`. -
defdefined in Q2Presentation/Lifting/Duality.leancomplete
def Q2Presentation.Lifting.IsAdjointBoundary.{u_2, u_3, u_4} {HV
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {HVdualType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {H2TType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.HVType u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) HVType u_2] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.HVdualType u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) HVdualType u_3] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.H2TType u_4] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) H2TType u_4] (boundaryHV →ₗ[ZMod 2] H2T: HVType u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.H2TType u_4) (dualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual: Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) H2TType u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.HVdualType u_3) (cupHV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2: HVType u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.HVdualType u_3→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) : PropThe universe of propositions. `Prop ≡ Sort 0`. Every proposition is propositionally equal to either `True` or `False`.def Q2Presentation.Lifting.IsAdjointBoundary.{u_2, u_3, u_4} {HV
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {HVdualType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {H2TType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.HVType u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) HVType u_2] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.HVdualType u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) HVdualType u_3] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.H2TType u_4] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) H2TType u_4] (boundaryHV →ₗ[ZMod 2] H2T: HVType u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.H2TType u_4) (dualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual: Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) H2TType u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.HVdualType u_3) (cupHV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2: HVType u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.HVdualType u_3→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) : PropThe universe of propositions. `Prop ≡ Sort 0`. Every proposition is propositionally equal to either `True` or `False`.**The adjoint-boundary relation** (`cor:adjointboundary`, eq:adjointboundary). The connecting map `∂ : H¹_{Γ,ρ}(V) → H²_{Γ,ρ}(T)` is *adjoint* to the dual-boundary map `ρ*∘∂_C^∨ : H²(T)^∨ → H¹(V^∨)` against the evaluation pairing on `H²(T)` and the perfect cup pairing `cup = ⟨·,·⟩_Γ` on `H¹(V) × H¹(V^∨)`: ``` ⟨∂c, χ⟩ = ⟨c, ρ*γ_χ⟩_Γ for all c ∈ H¹(V), χ ∈ H²(T)^∨. ``` On the candidate side this holds by the **naturality of the Fox–Heisenberg chain map** `D_{ρ,A}` (`prop:chainmap`, eq:chainid1/eq:chainid2, i.e. the traced finite-word Stokes identity `prop:tracedstokes`); on the local side by the compatibility of connecting homomorphisms with cup product and the invariant map (`prop:localduality`). The two sources thus share *the same* connecting map. -
theoremdefined in Q2Presentation/Lifting/Duality.leancomplete
theorem Q2Presentation.Lifting.isAdjointBoundary_unique.{u_2, u_3, u_4} {HV
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {HVdualType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {H2TType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.HVType u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) HVType u_2] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.HVdualType u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) HVdualType u_3] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.H2TType u_4] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) H2TType u_4] [Module.ProjectiveModule.Projective.{u_1, u_2} (R : Type u_1) [Semiring R] (P : Type u_2) [AddCommMonoid P] [Module R P] : PropAn R-module is projective if it is a direct summand of a free module, or equivalently if maps from the module lift along surjections. There are several other equivalent definitions.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) H2TType u_4] {b₁HV →ₗ[ZMod 2] H2Tb₂HV →ₗ[ZMod 2] H2T: HVType u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.H2TType u_4} {dualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual: Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) H2TType u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.HVdualType u_3} {cupHV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2: HVType u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.HVdualType u_3→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2} (h1Q2Presentation.Lifting.IsAdjointBoundary b₁ dualBoundary cup: Q2Presentation.Lifting.IsAdjointBoundaryQ2Presentation.Lifting.IsAdjointBoundary.{u_2, u_3, u_4} {HV : Type u_2} {HVdual : Type u_3} {H2T : Type u_4} [AddCommGroup HV] [Module (ZMod 2) HV] [AddCommGroup HVdual] [Module (ZMod 2) HVdual] [AddCommGroup H2T] [Module (ZMod 2) H2T] (boundary : HV →ₗ[ZMod 2] H2T) (dualBoundary : Module.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual) (cup : HV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2) : Prop**The adjoint-boundary relation** (`cor:adjointboundary`, eq:adjointboundary). The connecting map `∂ : H¹_{Γ,ρ}(V) → H²_{Γ,ρ}(T)` is *adjoint* to the dual-boundary map `ρ*∘∂_C^∨ : H²(T)^∨ → H¹(V^∨)` against the evaluation pairing on `H²(T)` and the perfect cup pairing `cup = ⟨·,·⟩_Γ` on `H¹(V) × H¹(V^∨)`: ``` ⟨∂c, χ⟩ = ⟨c, ρ*γ_χ⟩_Γ for all c ∈ H¹(V), χ ∈ H²(T)^∨. ``` On the candidate side this holds by the **naturality of the Fox–Heisenberg chain map** `D_{ρ,A}` (`prop:chainmap`, eq:chainid1/eq:chainid2, i.e. the traced finite-word Stokes identity `prop:tracedstokes`); on the local side by the compatibility of connecting homomorphisms with cup product and the invariant map (`prop:localduality`). The two sources thus share *the same* connecting map.b₁HV →ₗ[ZMod 2] H2TdualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdualcupHV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2) (h2Q2Presentation.Lifting.IsAdjointBoundary b₂ dualBoundary cup: Q2Presentation.Lifting.IsAdjointBoundaryQ2Presentation.Lifting.IsAdjointBoundary.{u_2, u_3, u_4} {HV : Type u_2} {HVdual : Type u_3} {H2T : Type u_4} [AddCommGroup HV] [Module (ZMod 2) HV] [AddCommGroup HVdual] [Module (ZMod 2) HVdual] [AddCommGroup H2T] [Module (ZMod 2) H2T] (boundary : HV →ₗ[ZMod 2] H2T) (dualBoundary : Module.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual) (cup : HV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2) : Prop**The adjoint-boundary relation** (`cor:adjointboundary`, eq:adjointboundary). The connecting map `∂ : H¹_{Γ,ρ}(V) → H²_{Γ,ρ}(T)` is *adjoint* to the dual-boundary map `ρ*∘∂_C^∨ : H²(T)^∨ → H¹(V^∨)` against the evaluation pairing on `H²(T)` and the perfect cup pairing `cup = ⟨·,·⟩_Γ` on `H¹(V) × H¹(V^∨)`: ``` ⟨∂c, χ⟩ = ⟨c, ρ*γ_χ⟩_Γ for all c ∈ H¹(V), χ ∈ H²(T)^∨. ``` On the candidate side this holds by the **naturality of the Fox–Heisenberg chain map** `D_{ρ,A}` (`prop:chainmap`, eq:chainid1/eq:chainid2, i.e. the traced finite-word Stokes identity `prop:tracedstokes`); on the local side by the compatibility of connecting homomorphisms with cup product and the invariant map (`prop:localduality`). The two sources thus share *the same* connecting map.b₂HV →ₗ[ZMod 2] H2TdualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdualcupHV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2) : b₁HV →ₗ[ZMod 2] H2T=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`.b₂HV →ₗ[ZMod 2] H2Ttheorem Q2Presentation.Lifting.isAdjointBoundary_unique.{u_2, u_3, u_4} {HV
Type u_2: Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {HVdualType u_3: Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} {H2TType u_4: Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`.} [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.HVType u_2] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) HVType u_2] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.HVdualType u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) HVdualType u_3] [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.H2TType u_4] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring. It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`, connected by a "scalar multiplication" operation `r • x : M` (where `r : R` and `x : M`) with some natural associativity and distributivity axioms similar to those on a ring.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) H2TType u_4] [Module.ProjectiveModule.Projective.{u_1, u_2} (R : Type u_1) [Semiring R] (P : Type u_2) [AddCommMonoid P] [Module R P] : PropAn R-module is projective if it is a direct summand of a free module, or equivalently if maps from the module lift along surjections. There are several other equivalent definitions.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) H2TType u_4] {b₁HV →ₗ[ZMod 2] H2Tb₂HV →ₗ[ZMod 2] H2T: HVType u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.H2TType u_4} {dualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual: Module.DualModule.Dual.{u_4, u_5} (R : Type u_4) (M : Type u_5) [Semiring R] [AddCommMonoid M] [Module R M] : Type (max u_5 u_4)The left dual space of an R-module M is the R-module of linear maps `M → R`.(ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2) H2TType u_4→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.HVdualType u_3} {cupHV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2: HVType u_2→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.HVdualType u_3→ₗ[LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2]LinearMap.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S) (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A map `f` between an `R`-module and an `S`-module over a ring homomorphism `σ : R →+* S` is semilinear if it satisfies the two properties `f (x + y) = f x + f y` and `f (c • x) = (σ c) • f x`. Elements of `LinearMap σ M M₂` (available under the notation `M →ₛₗ[σ] M₂`) are bundled versions of such maps. For plain linear maps (i.e. for which `σ = RingHom.id R`), the notation `M →ₗ[R] M₂` is available. An unbundled version of plain linear maps is available with the predicate `IsLinearMap`, but it should be avoided most of the time.ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.2} (h1Q2Presentation.Lifting.IsAdjointBoundary b₁ dualBoundary cup: Q2Presentation.Lifting.IsAdjointBoundaryQ2Presentation.Lifting.IsAdjointBoundary.{u_2, u_3, u_4} {HV : Type u_2} {HVdual : Type u_3} {H2T : Type u_4} [AddCommGroup HV] [Module (ZMod 2) HV] [AddCommGroup HVdual] [Module (ZMod 2) HVdual] [AddCommGroup H2T] [Module (ZMod 2) H2T] (boundary : HV →ₗ[ZMod 2] H2T) (dualBoundary : Module.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual) (cup : HV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2) : Prop**The adjoint-boundary relation** (`cor:adjointboundary`, eq:adjointboundary). The connecting map `∂ : H¹_{Γ,ρ}(V) → H²_{Γ,ρ}(T)` is *adjoint* to the dual-boundary map `ρ*∘∂_C^∨ : H²(T)^∨ → H¹(V^∨)` against the evaluation pairing on `H²(T)` and the perfect cup pairing `cup = ⟨·,·⟩_Γ` on `H¹(V) × H¹(V^∨)`: ``` ⟨∂c, χ⟩ = ⟨c, ρ*γ_χ⟩_Γ for all c ∈ H¹(V), χ ∈ H²(T)^∨. ``` On the candidate side this holds by the **naturality of the Fox–Heisenberg chain map** `D_{ρ,A}` (`prop:chainmap`, eq:chainid1/eq:chainid2, i.e. the traced finite-word Stokes identity `prop:tracedstokes`); on the local side by the compatibility of connecting homomorphisms with cup product and the invariant map (`prop:localduality`). The two sources thus share *the same* connecting map.b₁HV →ₗ[ZMod 2] H2TdualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdualcupHV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2) (h2Q2Presentation.Lifting.IsAdjointBoundary b₂ dualBoundary cup: Q2Presentation.Lifting.IsAdjointBoundaryQ2Presentation.Lifting.IsAdjointBoundary.{u_2, u_3, u_4} {HV : Type u_2} {HVdual : Type u_3} {H2T : Type u_4} [AddCommGroup HV] [Module (ZMod 2) HV] [AddCommGroup HVdual] [Module (ZMod 2) HVdual] [AddCommGroup H2T] [Module (ZMod 2) H2T] (boundary : HV →ₗ[ZMod 2] H2T) (dualBoundary : Module.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual) (cup : HV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2) : Prop**The adjoint-boundary relation** (`cor:adjointboundary`, eq:adjointboundary). The connecting map `∂ : H¹_{Γ,ρ}(V) → H²_{Γ,ρ}(T)` is *adjoint* to the dual-boundary map `ρ*∘∂_C^∨ : H²(T)^∨ → H¹(V^∨)` against the evaluation pairing on `H²(T)` and the perfect cup pairing `cup = ⟨·,·⟩_Γ` on `H¹(V) × H¹(V^∨)`: ``` ⟨∂c, χ⟩ = ⟨c, ρ*γ_χ⟩_Γ for all c ∈ H¹(V), χ ∈ H²(T)^∨. ``` On the candidate side this holds by the **naturality of the Fox–Heisenberg chain map** `D_{ρ,A}` (`prop:chainmap`, eq:chainid1/eq:chainid2, i.e. the traced finite-word Stokes identity `prop:tracedstokes`); on the local side by the compatibility of connecting homomorphisms with cup product and the invariant map (`prop:localduality`). The two sources thus share *the same* connecting map.b₂HV →ₗ[ZMod 2] H2TdualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdualcupHV →ₗ[ZMod 2] HVdual →ₗ[ZMod 2] ZMod 2) : b₁HV →ₗ[ZMod 2] H2T=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`.b₂HV →ₗ[ZMod 2] H2T**The adjoint-boundary relation determines the connecting map.** Against the evaluation pairing on `H²(T)`, eq:adjointboundary pins `∂` down uniquely from the dual-boundary and cup data. This is the numerical force of `cor:adjointboundary`: the candidate and local connecting maps — sharing the common dual boundary and the common perfect cup pairing (`prop:defduality` = `prop:localduality` numerically) — necessarily **agree**. (Uses only that linear functionals separate points of the finite-dimensional `H²(T)`.)
Proved in §5 of the paper. Ingredients: Theorem 5.12 Theorem 5.13.