Blueprint (GPT formalization): a profinite presentation of the absolute Galois group of ℚ₂

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.11 theorem
  • theoremdefined in Q2Presentation/Foundation/Omega2.lean
    complete
    theorem Q2Presentation.finite_omega2_pow_independent_of_rep.{u_1} {GType 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
    theorem Q2Presentation.finite_omega2_pow_independent_of_rep.{u_1}
      {GType 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. 

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:

  1. if D and X have the same image in V, then \mathfrak h_\phi(X,D)=X^2;

  2. if \phi is the identity, then \mathfrak h_\phi(X,D)=X^2 for every D.

Lean code for Lemma5.22 theorems
  • theoremdefined in Q2Presentation/Lifting/HeisenbergCup.lean
    complete
    theorem Q2Presentation.Lifting.collector_eq.{u_2} {GType 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) (XG DG : GType u_2) (hsq∀ (g h : G), g ^ 2 * h = h * g ^ 2 :  (gG hG : 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) :  (aG bG hG : 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 :  (aG bG : 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 →* G XG DG =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 →* G 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`. 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 →* G DG
    theorem Q2Presentation.Lifting.collector_eq.{u_2}
      {GType 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)
      (XG DG : GType u_2)
      (hsq∀ (g h : G), g ^ 2 * h = h * g ^ 2 :
         (gG hG : 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) :
         (aG bG hG : 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 :
         (aG bG : 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 →* G XG DG =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 →* G 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`. 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 →* G DG
    **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.lean
    complete
    theorem Q2Presentation.Lifting.collector_id_eq_sq.{u_2} {GType 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]
      (XG DG : 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) XG DG =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
    theorem Q2Presentation.Lifting.collector_id_eq_sq.{u_2}
      {GType 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] (XG DG : 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) XG DG =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`. 
Lemma5.3
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Lemma 5.4
Loading preview
Hover a use site to preview it.

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:

  1. the first derivative of h_0 is the first derivative of x_0^2, namely zero;

  2. on the normalized degree-one representatives supported on x_0, the mixed Heisenberg and extraspecial central coordinates of h_0 are respectively those of x_0^2.

Thus h_0 may replace x_0^2 in every linear, cup-product, and determinant calculation used below.

Lean code for Lemma5.35 theorems
  • theoremdefined in Q2Presentation/Induction/Section7FrattiniTrivialElementary.lean
    complete
    theorem Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowManuscriptH0Data
      {pQ2Presentation.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 p chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor hRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1 childQ2Presentation.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
      {pQ2Presentation.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 p chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor hRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1 childQ2Presentation.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.lean
    complete
    theorem Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowProductRuleCoreData
      {pQ2Presentation.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 p chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor hRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1 childQ2Presentation.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 child h0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorData src u1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorData src x1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorData src c0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowC0FactorData src)
    theorem Q2Presentation.Induction.sec7_frattiniTrivial_elementaryMStageCandidateWildRowProductRuleCoreData
      {pQ2Presentation.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 p chiefQ2Presentation.Induction.FirstNonScalarChiefFactor p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor hRNat.card ↥(Q2Presentation.Induction.kernelFrattini K) = 1 childQ2Presentation.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 child h0Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowH0FactorData src u1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowU1InvFactorData src x1Q2Presentation.Induction.Sec7FrattiniTrivialElementaryMStageCandidateWildRowX1ConjFactorData src c0Q2Presentation.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.lean
    complete
    theorem Q2Presentation.Lifting.HeisQ.sq_eq.{u_1} {AType 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 A vAThe 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 0,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 dlQ2Presentation.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 A 0,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 zZMod 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 A uQ2Presentation.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 A
    theorem Q2Presentation.Lifting.HeisQ.sq_eq.{u_1}
      {AType 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 A vAThe 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 0,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 dlQ2Presentation.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 A 0,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 zZMod 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 A uQ2Presentation.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 A
    The **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.lean
    complete
    theorem Q2Presentation.Lifting.d1_comp_d0_ofRep_tameFactor.{u_1, u_2}
      {AType 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) (sC tC x₀C x₁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) A x₁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) A 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`.) (ρC →* Module.End (ZMod 2) A tC)
            (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) A tC) ∘ₗ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.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) A sC) (ρC →* Module.End (ZMod 2) A tC) (ρC →* Module.End (ZMod 2) A x₀C) (ρC →* Module.End (ZMod 2) A x₁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`.
        0
    theorem Q2Presentation.Lifting.d1_comp_d0_ofRep_tameFactor.{u_1,
        u_2}
      {AType 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)
      (sC tC x₀C x₁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) A x₁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) A 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`.) (ρC →* Module.End (ZMod 2) A tC)
            (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) A
              tC) ∘ₗ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.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) A sC)
            (ρC →* Module.End (ZMod 2) A tC) (ρC →* Module.End (ZMod 2) A x₀C) (ρC →* Module.End (ZMod 2) A x₁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`.
        0
    On 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.lean
    complete
    theorem Q2Presentation.Quadratic.Extraspecial.extraspecialForm_eq_heisSquare.{u_1}
      {VType 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 A vVThe 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 cV,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 dlModule.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) V cV,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 zZMod 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 A 0 }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}
      {VType 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 A vVThe 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 cV,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 dlModule.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) V cV,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 zZMod 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 A 0 }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`. 
Proof

Proved in §5 of the paper. Ingredients: Lemma 5.2.

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.41 theorem
  • theoremdefined in Q2Presentation/Lifting/HeisenbergCup.lean
    complete
    theorem Q2Presentation.Lifting.d1_trivial
      (xZMod 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
      (xZMod 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). 
Proof

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.51 theorem
  • theoremdefined in Q2Presentation/Lifting/HeisenbergNatural.lean
    complete
    theorem Q2Presentation.Lifting.betaShadow_natural
      {YtQ2Presentation.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 V'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.BoundaryFramedTarget 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.BoundaryFramedTarget V'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) V yYt.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) V yYt.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 → V gQ2Presentation.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 V qQ2Presentation.Marking Yt.Y nQ2Presentation.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 map  fV →ₗ[ZMod 2] V') wQ2Presentation.GExpr
    theorem Q2Presentation.Lifting.betaShadow_natural
      {YtQ2Presentation.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 V'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.BoundaryFramedTarget 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.BoundaryFramedTarget V'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) V yYt.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) V yYt.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 → V gQ2Presentation.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 V qQ2Presentation.Marking Yt.Y
          nQ2Presentation.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 map  fV →ₗ[ZMod 2] V') wQ2Presentation.GExpr
    **β-naturality** (`lem:heisnatural`): the cup coordinate transports
    strictly along intertwiners. 

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.61 theorem
  • theoremdefined in Q2Presentation/Lifting/HeisenbergStokes.lean
    complete
    theorem Q2Presentation.Lifting.traced_stokes
      {YtQ2Presentation.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.BoundaryFramedTarget VType)
      (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 V qQ2Presentation.Marking Yt.Y nQ2Presentation.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.Y gQ2Presentation.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 V qQ2Presentation.Marking Yt.Y nQ2Presentation.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.Y gQ2Presentation.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) V qQ2Presentation.Marking Yt.Y nQ2Presentation.Gen → 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`.
          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) V qQ2Presentation.Marking Yt.Y nQ2Presentation.Gen → V
                Q2Presentation.Q2Word.wildRelatorQ2Presentation.Q2Word.wildRelator : Q2Presentation.GExprThe wild relator `h₀ · u₁⁻¹ · x₁^σ · c₀` (the relation `h₀ u₁⁻¹ x₁^σ c₀ = 1`). ))
    theorem Q2Presentation.Lifting.traced_stokes
      {YtQ2Presentation.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.BoundaryFramedTarget VType)
      (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 V qQ2Presentation.Marking Yt.Y nQ2Presentation.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.Y gQ2Presentation.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 V
            qQ2Presentation.Marking Yt.Y nQ2Presentation.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.Y gQ2Presentation.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) V qQ2Presentation.Marking Yt.Y nQ2Presentation.Gen → 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`.
          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) V qQ2Presentation.Marking Yt.Y nQ2Presentation.Gen → V
                Q2Presentation.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. 
Proof

Proved in §5 of the paper. Ingredients: Lemma 5.1 Lemma 5.5.

Theorem5.7
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Lemma 5.8
Loading preview
Hover a use site to preview it.

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.74 declarations
  • defdefined in Q2Presentation/Induction/CandidateIota.lean
    complete
    def Q2Presentation.Induction.levelTrace (AQ2Presentation.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.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.  
          (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget AQ2Presentation.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.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ), zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 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)
      (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.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ), zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 y(Q2Presentation.Induction.levelBase A).Y 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`. 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).Y b(Q2Presentation.Induction.levelBase A).Y c(Q2Presentation.Induction.levelBase A).Y : (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 a(Q2Presentation.Induction.levelBase A).Y b(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 2 b(Q2Presentation.Induction.levelBase A).Y c(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 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`.) :
      ZModZMod : ℕ → TypeThe integers modulo `n : ℕ`.  2
    def Q2Presentation.Induction.levelTrace
      (AQ2Presentation.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.BoundaryFramedTarget
              AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.  
          (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget
                AQ2Presentation.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.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 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)
      (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.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 y(Q2Presentation.Induction.levelBase A).Y 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`. 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).Y b(Q2Presentation.Induction.levelBase A).Y c(Q2Presentation.Induction.levelBase A).Y :
            (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 a(Q2Presentation.Induction.levelBase A).Y b(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 2 b(Q2Presentation.Induction.levelBase A).Y c(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 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`.) :
      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.lean
    complete
    theorem Q2Presentation.Induction.levelTrace_add
      (AQ2Presentation.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.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.  
          (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget AQ2Presentation.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.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ), zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 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)
      (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.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ), zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 y(Q2Presentation.Induction.levelBase A).Y 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`. 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).Y b(Q2Presentation.Induction.levelBase A).Y c(Q2Presentation.Induction.levelBase A).Y : (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 a(Q2Presentation.Induction.levelBase A).Y b(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 2 b(Q2Presentation.Induction.levelBase A).Y c(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 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`.)
      (zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 :
        (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.  
          (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget AQ2Presentation.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.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ), zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 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)
      (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.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ), zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 y(Q2Presentation.Induction.levelBase A).Y 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`. 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).Y b(Q2Presentation.Induction.levelBase A).Y c(Q2Presentation.Induction.levelBase A).Y : (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 a(Q2Presentation.Induction.levelBase A).Y b(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 2 b(Q2Presentation.Induction.levelBase A).Y c(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 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`.)
      (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.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          (fun u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(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.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          (fun u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y) y(Q2Presentation.Induction.levelBase A).Y 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`. 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).Y b(Q2Presentation.Induction.levelBase A).Y c(Q2Presentation.Induction.levelBase A).Y : (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          (fun u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y) a(Q2Presentation.Induction.levelBase A).Y b(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).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(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).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y) b(Q2Presentation.Induction.levelBase A).Y c(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).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(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).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y) h121∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) 1 y = 0 h122∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) y 1 = 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) =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.AdmissibleIndex zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 h11∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ 1 y = 0 h12∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ y 1 = 0 h1c∀ (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.AdmissibleIndex zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 h21∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ 1 y = 0 h22∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ y 1 = 0 h2c∀ (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
      (AQ2Presentation.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.BoundaryFramedTarget
              AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.  
          (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget
                AQ2Presentation.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.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 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)
      (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.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 y(Q2Presentation.Induction.levelBase A).Y 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`. 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).Y b(Q2Presentation.Induction.levelBase A).Y c(Q2Presentation.Induction.levelBase A).Y :
            (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 a(Q2Presentation.Induction.levelBase A).Y b(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 2 b(Q2Presentation.Induction.levelBase A).Y c(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 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`.)
      (zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 :
        (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget
              AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`.  
          (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget
                AQ2Presentation.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.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 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)
      (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.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 y(Q2Presentation.Induction.levelBase A).Y 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`. 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).Y b(Q2Presentation.Induction.levelBase A).Y c(Q2Presentation.Induction.levelBase A).Y :
            (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 a(Q2Presentation.Induction.levelBase A).Y b(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 2 b(Q2Presentation.Induction.levelBase A).Y c(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 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`.)
      (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.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          (fun u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(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.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          (fun u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y) y(Q2Presentation.Induction.levelBase A).Y
              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`.
            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).Y b(Q2Presentation.Induction.levelBase A).Y c(Q2Presentation.Induction.levelBase A).Y :
            (Q2Presentation.Induction.levelBaseQ2Presentation.Induction.levelBase (A : Q2Presentation.AdmissibleIndex) : Q2Presentation.BoundaryFramedTarget
                AQ2Presentation.AdmissibleIndex).YQ2Presentation.BoundaryFramedTarget.Y (self : Q2Presentation.BoundaryFramedTarget) : TypeThe finite target group `Y`. ),
          (fun u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y) a(Q2Presentation.Induction.levelBase A).Y
                b(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).Y v(Q2Presentation.Induction.levelBase A).Y =>
                  zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(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).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y)
                b(Q2Presentation.Induction.levelBase A).Y c(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).Y v(Q2Presentation.Induction.levelBase A).Y =>
                  zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(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).Y v(Q2Presentation.Induction.levelBase A).Y => zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 u(Q2Presentation.Induction.levelBase A).Y v(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 u(Q2Presentation.Induction.levelBase A).Y v(Q2Presentation.Induction.levelBase A).Y)
          h121∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) 1 y = 0 h122∀ (y : (Q2Presentation.Induction.levelBase A).Y), (fun u v => zeta₁ u v + zeta₂ u v) y 1 = 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) =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.AdmissibleIndex
            zeta₁(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 h11∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ 1 y = 0 h12∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₁ y 1 = 0 h1c∀ (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.AdmissibleIndex zeta₂(Q2Presentation.Induction.levelBase A).Y → (Q2Presentation.Induction.levelBase A).Y → ZMod 2 h21∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ 1 y = 0 h22∀ (y : (Q2Presentation.Induction.levelBase A).Y), zeta₂ y 1 = 0 h2c∀ (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.lean
    complete
    theorem Q2Presentation.Lifting.D2_inl.{u_1} {AType 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`. uA
    theorem Q2Presentation.Lifting.D2_inl.{u_1}
      {AType 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`. uA
    The 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.lean
    complete
    def Q2Presentation.Lifting.D1trivial :
      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.  →ₗ[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.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.  →ₗ[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. 
Proof

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.81 theorem
  • theoremdefined in Q2Presentation/Lifting/Duality.lean
    complete
    theorem Q2Presentation.Lifting.connectingMap_spec.{u_2, u_3, u_4, u_5, u_6, u_7}
      {T4Type 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] M2 mM4) =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] V4 mM4))
      (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] M4 wT4) =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] T2 wT4)) (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] V2 p4M4 →ₗ[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] M2 tT2 =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] T2 dMM4 →ₗ[ZMod 2] M2 dVV4 →ₗ[ZMod 2] V2 i4T4 →ₗ[ZMod 2] M4 p4M4 →ₗ[ZMod 2] V4 i2T2 →ₗ[ZMod 2] M2 p2M2 →ₗ[ZMod 2] V2 hi2Function.Injective ⇑i2 hex2p2.ker = i2.range
            hnatV∀ (m : M4), p2 (dM m) = dV (p4 m) hp4Function.Surjective ⇑p4 hex4p4.ker = i4.range hnatM∀ (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
    theorem Q2Presentation.Lifting.connectingMap_spec.{u_2,
        u_3, u_4, u_5, u_6, u_7}
      {T4Type 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] M2 mM4) =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] V4 mM4))
      (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] M4 wT4) =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] T2 wT4))
      (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] V2 p4M4 →ₗ[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] M2 tT2 =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] T2
            dMM4 →ₗ[ZMod 2] M2 dVV4 →ₗ[ZMod 2] V2 i4T4 →ₗ[ZMod 2] M4 p4M4 →ₗ[ZMod 2] V4 i2T2 →ₗ[ZMod 2] M2 p2M2 →ₗ[ZMod 2] V2 hi2Function.Injective ⇑i2 hex2p2.ker = i2.range hnatV∀ (m : M4), p2 (dM m) = dV (p4 m)
            hp4Function.Surjective ⇑p4 hex4p4.ker = i4.range hnatM∀ (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`. 
Proof

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.91 theorem
  • theoremdefined in Q2Presentation/Lifting/SectionDischarge.lean
    complete
    theorem Q2Presentation.Lifting.famWildFixed_ne_bot
      {YtQ2Presentation.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.BoundaryFramedTarget VType) [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
      {YtQ2Presentation.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.BoundaryFramedTarget VType)
      [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.

  1. If \mathsf T=1, then P=1, 1+\mathsf S^{-1} is invertible, and Z^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\}.

  2. If V^{\mathsf T}=0, then P=0 and \mathsf T-1=1+\mathsf T is invertible. The wild row first forces d=0. Subtracting the coboundary of v=(\mathsf T-1)^{-1}b kills b, and the tame row then forces a=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.102 theorems
  • theoremdefined in Q2Presentation/Lifting/HeisenbergCup.lean
    complete
    theorem Q2Presentation.Lifting.powOmega2_pow_ordProj.{u_2} {GType 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
    theorem Q2Presentation.Lifting.powOmega2_pow_ordProj.{u_2}
      {GType 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.lean
    complete
    theorem Q2Presentation.Lifting.famRows_surjective_of_simple
      {YtQ2Presentation.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.BoundaryFramedTarget VType)
      (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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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) V qQ2Presentation.Marking Yt.Y nQ2Presentation.Gen → V
              Q2Presentation.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) V qQ2Presentation.Marking Yt.Y nQ2Presentation.Gen → V
              Q2Presentation.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
    theorem Q2Presentation.Lifting.famRows_surjective_of_simple
      {YtQ2Presentation.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.BoundaryFramedTarget VType)
      (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.Y Q2Presentation.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.Y
                      Q2Presentation.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.Y
                        Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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.Y Q2Presentation.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) V qQ2Presentation.Marking Yt.Y nQ2Presentation.Gen → V
              Q2Presentation.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) V qQ2Presentation.Marking Yt.Y nQ2Presentation.Gen → V
              Q2Presentation.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. 
Proof

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.113 theorems
  • theoremdefined in Q2Presentation/Lifting/HeisenbergCup.lean
    complete
    theorem Q2Presentation.Lifting.pairingOp_isUnit.{u_1} {AType 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}
      {AType 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.lean
    complete
    theorem Q2Presentation.Lifting.mixedHessian_value.{u_1} {AType 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 A cA +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 A vAThe 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 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 A dlQ2Presentation.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 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 A zZMod 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 A 0 }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 A vAThe 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 A dlModule.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 A zZMod 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 A 0 }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}
      {AType 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 A cA +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 A vAThe 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 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 A dlQ2Presentation.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 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 A zZMod 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 A 0 }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 A vAThe 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 A
              dlModule.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 A
              zZMod 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 A 0 }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.lean
    complete
    theorem Q2Presentation.Lifting.pairingOp_powOmega2_isUnit.{u_1} {AType 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}
      {AType 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. 
Proof

Proved in §5 of the paper. Ingredients: Lemma 5.3.

Theorem5.12

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.1213 declarations
  • theoremdefined in Q2Presentation/Induction/EdgeDelSurjDischarge.lean
    complete
    theorem Q2Presentation.Induction.delWeakZ1_card_gammaA_of
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor SSubmodule (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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor SSubmodule (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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K) hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S
                      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.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K) hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S
              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.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
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor SSubmodule (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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor SSubmodule (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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K) hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S
                      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.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor SSubmodule (ZMod 2) (Q2Presentation.Induction.towerM K) hS∀ (c : Q2Presentation.Induction.towerC K), ∀ m ∈ S, ((Q2Presentation.Induction.towerActM K) c) m ∈ S
              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.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.lean
    complete
    theorem Q2Presentation.Induction.edgeDelSurj_gammaA
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor
        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.boundaryFramedSurj Q2Presentation.boundaryPackage_GammaA (Q2Presentation.Induction.cChild chief K).fst
      (Q2Presentation.Induction.cChild chief K).snd
    theorem Q2Presentation.Induction.edgeDelSurj_gammaA
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor
        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.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.lean
    complete
    theorem Q2Presentation.Induction.sec7_xr_bockstein_witness
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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.R
                        c(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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget}
      (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y)
              (qQ2Presentation.Marking p.fst.Y aQ2Presentation.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.Y aQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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) V
                  yp.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 p KQ2Presentation.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 p KQ2Presentation.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) V
                  yp.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 p KQ2Presentation.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) V
                qQ2Presentation.Marking p.fst.Y nQ2Presentation.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 p KQ2Presentation.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) V
              qQ2Presentation.Marking p.fst.Y nQ2Presentation.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
      {pQ2Presentation.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 p
                        KQ2Presentation.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 p
                              KQ2Presentation.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.R
                        c(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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget}
      (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y)
              (qQ2Presentation.Marking p.fst.Y aQ2Presentation.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.Y aQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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) V
                  yp.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 p KQ2Presentation.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 p KQ2Presentation.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) V
                  yp.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 p KQ2Presentation.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) V
                qQ2Presentation.Marking p.fst.Y nQ2Presentation.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 p KQ2Presentation.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) V
              qQ2Presentation.Marking p.fst.Y nQ2Presentation.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.lean
    complete
    theorem Q2Presentation.Induction.sec7_xr_layer_data
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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.R
                        c(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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget}
      (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y)
                  (qQ2Presentation.Marking p.fst.Y aQ2Presentation.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.Y aQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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
    theorem Q2Presentation.Induction.sec7_xr_layer_data
      {pQ2Presentation.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 p
                        KQ2Presentation.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 p
                              KQ2Presentation.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.R
                        c(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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget}
      (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y)
                  (qQ2Presentation.Marking p.fst.Y aQ2Presentation.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.Y aQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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.lean
    complete
    theorem Q2Presentation.Induction.weakZ1_tChild_card_gammaA_intrinsic
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget}
      (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y
          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.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget}
      (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y
          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.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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.lean
    complete
    theorem Q2Presentation.Induction.weakZ1_vLayer_card_gammaA_intrinsic
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget}
      (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y
          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.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.Induction.KernelMinimal chief.toNonScalarChiefFactor).NQ2Presentation.Lifting.ElementaryKernel.N {Yt : Q2Presentation.BoundaryFramedTarget}
      (self : Q2Presentation.Lifting.ElementaryKernel Yt) : Subgroup Yt.Y
          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.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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.lean
    complete
    theorem Q2Presentation.Lifting.rowMap_card_two_apply
      {YtQ2Presentation.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 Yt qQ2Presentation.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 E 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 E 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_card_two_apply
      {YtQ2Presentation.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 Yt qQ2Presentation.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 E 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 E 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 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.lean
    complete
    theorem Q2Presentation.Lifting.cupToDual_injective :
      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`.  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.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`. 
        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.lean
    complete
    def Q2Presentation.Lifting.cupEquivDual :
      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.  ≃ₗ[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.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.  ≃ₗ[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.lean
    complete
    theorem Q2Presentation.Lifting.finrank_H1_eq_dual :
      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) 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.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)
          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.lean
    complete
    def Q2Presentation.Lifting.Z1_trivial_equiv_model :
      (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).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.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).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.lean
    complete
    theorem Q2Presentation.Lifting.cupFormQ_nondegenerate
      {xZMod 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 2 yZMod 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`. 0
    theorem Q2Presentation.Lifting.cupFormQ_nondegenerate
      {xZMod 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 2
              yZMod 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`. 0
    The 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.lean
    complete
    theorem Q2Presentation.Lifting.rowMap_scalarRelKernel_apply
      {YtQ2Presentation.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 Yt lamModule.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 Yt lamModule.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 Yt lamModule.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
      {YtQ2Presentation.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 Yt lamModule.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 Yt lamModule.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 Yt lamModule.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. 
Proof

Proved in §5 of the paper. Ingredients: Lemma 5.8 Lemma 5.10 Lemma 5.9.

Theorem5.13
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Corollary 5.14
Loading preview
Hover a use site to preview it.

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.133 declarations
  • defdefined in Q2Presentation/Induction/EdgeHalvingLocal.lean
    complete
    def Q2Presentation.Induction.EdgeTwistReachGQ2
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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
      {pQ2Presentation.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 p KQ2Presentation.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 p KQ2Presentation.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.lean
    complete
    theorem Q2Presentation.Induction.q2_localduality
      {YtQ2Presentation.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 Yt yYt.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.BoundaryFramedTarget EQ2Presentation.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.BoundaryFramedTarget EQ2Presentation.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.BoundaryFramedTarget EQ2Presentation.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 Yt gQ2Presentation.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.BoundaryFramedTarget EQ2Presentation.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 Yt gQ2Presentation.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.BoundaryFramedTarget EQ2Presentation.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 Yt gQ2Presentation.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
    theorem Q2Presentation.Induction.q2_localduality
      {YtQ2Presentation.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 Yt yYt.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.BoundaryFramedTarget EQ2Presentation.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.BoundaryFramedTarget EQ2Presentation.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.BoundaryFramedTarget EQ2Presentation.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 Yt gQ2Presentation.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.BoundaryFramedTarget EQ2Presentation.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 Yt gQ2Presentation.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.BoundaryFramedTarget EQ2Presentation.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 Yt gQ2Presentation.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.lean
    complete
    theorem Q2Presentation.Local.q2_local_Z1_dim
      (AQ2Presentation.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
      (AQ2Presentation.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`. 
Corollary5.14
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Corollary 6.6
Loading preview
Hover a use site to preview it.

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.143 declarations
  • defdefined in Q2Presentation/Lifting/Duality.lean
    complete
    def Q2Presentation.Lifting.connectingMap.{u_2, u_3, u_4, u_5, u_6, u_7}
      {T4Type 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] M2 mM4) =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] V4 mM4))
      (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] M4 wT4) =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] T2 wT4)) :
      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}
      {T4Type 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] M2 mM4) =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] V4 mM4))
      (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] M4 wT4) =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] T2 wT4)) :
      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.lean
    complete
    def Q2Presentation.Lifting.IsAdjointBoundary.{u_2, u_3, u_4} {HVType 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}
      {HVType 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.lean
    complete
    theorem Q2Presentation.Lifting.isAdjointBoundary_unique.{u_2, u_3, u_4}
      {HVType 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] H2T b₂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] H2T dualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual cupHV →ₗ[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] H2T dualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual cupHV →ₗ[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
    theorem Q2Presentation.Lifting.isAdjointBoundary_unique.{u_2,
        u_3, u_4}
      {HVType 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] H2T b₂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] H2T dualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual cupHV →ₗ[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] H2T dualBoundaryModule.Dual (ZMod 2) H2T →ₗ[ZMod 2] HVdual cupHV →ₗ[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)`.) 
Proof

Proved in §5 of the paper. Ingredients: Theorem 5.12 Theorem 5.13.