Pith. sign in

IndisputableMonolith.Cost.GaugeOrbitClassification

IndisputableMonolith/Cost/GaugeOrbitClassification.lean · 399 lines · 17 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: pending

   1/-
   2# The anchor-free gauge classification, on one named import
   3
   4`GaugeOrbitIsSignedPowerFamily` said: every inhabitant of the anchor-free structural cost
   5ledger is either the sign cost or the sign-extended power cost of some nonnegative integer
   6exponent, and nothing else. It was OPEN, resting on two unformalized imports plus prose
   7glue. This module proves it, conditional on ONE hypothesis, the six exponentials input
   8already named in `Cost.TraceRationalExponent`.
   9
  10What changed is that the second import is gone. Erdős's theorem, that a monotone completely
  11multiplicative function on the positive integers is a power, is now proved from nothing in
  12`Cost.MonotoneMultiplicativePower` by Howe's argument, so it enters as a theorem and not as
  13a hypothesis.
  14
  15The chain, in the order the file builds it:
  16
  171. Above one the trace order and the value order agree (`le_of_trace_le`), so the ledger's
  18   monotonicity of costs on positive integer orbits becomes monotonicity of the extracted
  19   character. That plus complete multiplicativity is exactly Howe's hypothesis pack.
  202. Howe gives `χ(n) = n^c` for one real `c ≥ 0`, and the nondegenerate branch forces
  21   `c > 0` because `χ(2)` is the anchor root, which exceeds one.
  223. The traces of the cost are displays of carrier elements, hence rational, so the six
  23   exponentials input applies and `c` is a positive integer `k`
  24   (`exponent_is_positive_integer`).
  254. Multiplicativity carries `χ` from the integers to every positive rational, orientation
  26   reversal carries it across zero, and the cost is `J ∘ χ` throughout, which is the
  27   sign-extended power cost of exponent `k`.
  28
  29The degenerate branch, where the trace at two is exactly two, is the sign cost, and it is
  30handled first because the extraction that produces `χ` divides by `r² - 1`.
  31
  32Nothing here is conditional on the ledger being nonempty or on the exponent being odd. Both
  33parities occur; that was settled in `GaugeOrbitFromRealCharacter` by construction.
  34-/
  35
  36import IndisputableMonolith.Cost.GaugeOrbitFromRealCharacter
  37import IndisputableMonolith.Cost.MonotoneMultiplicativePower
  38
  39namespace IndisputableMonolith
  40namespace Foundation
  41namespace PrimitiveRecognitionCalculus
  42namespace PRCJCost
  43
  44open IndisputableMonolith.Cost.RealCharacterFactorization
  45  (SansAnchorHypotheses traceDisplay rationalTrace rationalTrace_eq_traceDisplay
  46    rationalTrace_pos_eq_two_of_two_eq_two nontrivialCharacterValue
  47    nontrivialCharacterValue_one nontrivialCharacterValue_mul
  48    nontrivialCharacterValue_recip nontrivialCharacterValue_trace
  49    nontrivialCharacterValue_two nontrivialCharacterValue_principal_on_nat
  50    nontrivialCharacterValue_nat_trace_mono anchorRoot anchorRoot_gt_one)
  51
  52open IndisputableMonolith.Cost.MonotonePower (MonotoneMultiplicative exists_exponent)
  53
  54open IndisputableMonolith.Cost.TraceRationalExponent
  55  (SixExponentialsTraceInput exponent_is_positive_integer)
  56
  57/-! ## The trace order is the value order, above one -/
  58
  59/-- `v ↦ v + v⁻¹` is strictly increasing on `[1,∞)`, so an inequality between traces of
  60principal values is an inequality between the values. This is what turns the ledger's
  61monotonicity condition, which constrains costs, into monotonicity of the character. -/
  62private theorem le_of_trace_le {a b : ℝ} (ha : 1 ≤ a) (hb : 1 ≤ b)
  63    (h : a + a⁻¹ ≤ b + b⁻¹) : a ≤ b := by
  64  by_contra hcon
  65  push_neg at hcon
  66  have ha0 : (0 : ℝ) < a := lt_of_lt_of_le zero_lt_one ha
  67  have hb0 : (0 : ℝ) < b := lt_of_lt_of_le zero_lt_one hb
  68  have hkey : (a + a⁻¹) - (b + b⁻¹) = (a - b) * (a * b - 1) / (a * b) := by
  69    field_simp
  70    ring
  71  have h1 : (0 : ℝ) < a - b := by linarith
  72  have h2 : (0 : ℝ) < a * b - 1 := by nlinarith [mul_le_mul_of_nonneg_left hb ha0.le]
  73  have hpos : 0 < (a - b) * (a * b - 1) / (a * b) :=
  74    div_pos (mul_pos h1 h2) (mul_pos ha0 hb0)
  75  rw [← hkey] at hpos
  76  linarith
  77
  78/-! ## Reading the cost off the trace -/
  79
  80variable {F : RatioOrbit → RatioOrbit}
  81
  82/-- The cost display is the trace display, halved and shifted. -/
  83private theorem cost_display (hS : SansAnchorHypotheses F) (q : RatioOrbit) :
  84    ((F q).toRat : ℝ) = rationalTrace F q.toRat / 2 - 1 := by
  85  rw [rationalTrace_eq_traceDisplay hS q]
  86  simp only [traceDisplay, nativeCostDoubledTrace, doubledTraceValue,
  87    RatioOrbit.mul_toRat, RatioOrbit.add_toRat, two_toRat, RatioOrbit.one_toRat]
  88  push_cast
  89  ring
  90
  91/-- At a zero display orientation reversal alone pins the cost, with no character and no
  92appeal to the zero calibration field. -/
  93private theorem cost_at_zero (hS : SansAnchorHypotheses F) {q : RatioOrbit}
  94    (hq : q.toRat = 0) : (F q).toRat = -1 := by
  95  have h := hS.sign_reversing q q (by rw [hq]; norm_num)
  96  linarith
  97
  98/-- Negative displays are determined by the positive ones. -/
  99private theorem cost_at_neg (hS : SansAnchorHypotheses F) (q : RatioOrbit) :
 100    (F q).toRat = -(F (ratioOrbitOfRat (-q.toRat))).toRat - 2 :=
 101  hS.sign_reversing (ratioOrbitOfRat (-q.toRat)) q
 102    (by rw [ratioOrbitOfRat_toRat]; ring)
 103
 104/-! ## The degenerate branch is the sign cost -/
 105
 106/-- **The degenerate anchor is exactly the sign cost.** If the trace at two is two then the
 107trace is two at every positive display, the cost vanishes there, and orientation reversal
 108fills in the rest. -/
 109theorem degenerate_is_signGauge (hS : SansAnchorHypotheses F)
 110    (htwo : rationalTrace F 2 = 2) (q : RatioOrbit) :
 111    RatioOrbit.crossEq (F q) (signGaugeNativeCost q) := by
 112  refine dispCross ?_
 113  rw [signGaugeNativeCost_toRat]
 114  rcases lt_trichotomy q.toRat 0 with hneg | hzero | hpos
 115  · have hpospart : (0 : ℚ) < -q.toRat := by linarith
 116    have hp : (F (ratioOrbitOfRat (-q.toRat))).toRat = 0 := by
 117      have h := cost_display hS (ratioOrbitOfRat (-q.toRat))
 118      rw [ratioOrbitOfRat_toRat,
 119        rationalTrace_pos_eq_two_of_two_eq_two hS htwo hpospart] at h
 120      norm_num at h
 121      exact_mod_cast h
 122    rw [cost_at_neg hS q, hp, signGaugeCostDisplay, if_neg (not_lt.mpr hneg.le),
 123      if_neg (ne_of_lt hneg)]
 124    norm_num
 125  · rw [cost_at_zero hS hzero, signGaugeCostDisplay,
 126      if_neg (by rw [hzero]; exact lt_irrefl 0), if_pos hzero]
 127  · have h := cost_display hS q
 128    rw [rationalTrace_pos_eq_two_of_two_eq_two hS htwo hpos] at h
 129    norm_num at h
 130    rw [signGaugeCostDisplay, if_pos hpos]
 131    exact_mod_cast h
 132
 133/-! ## The nondegenerate branch: Howe, then six exponentials -/
 134
 135/-- The extracted character, restricted to the positive integers, satisfies exactly the
 136hypotheses of Erdős's theorem. Complete multiplicativity is the extraction's own
 137multiplicativity; monotonicity is the ledger's, read through `le_of_trace_le`. -/
 138private theorem natChar_monotoneMultiplicative (hS : SansAnchorHypotheses F)
 139    (hnt : rationalTrace F 2 ≠ 2) :
 140    MonotoneMultiplicative (fun n : ℕ => nontrivialCharacterValue F (n : ℚ)) where
 141  unit := by simpa using nontrivialCharacterValue_one hS hnt
 142  mul := by
 143    intro m n hm hn
 144    have hmq : ((m : ℕ) : ℚ) ≠ 0 := by exact_mod_cast (show m ≠ 0 by omega)
 145    have hnq : ((n : ℕ) : ℚ) ≠ 0 := by exact_mod_cast (show n ≠ 0 by omega)
 146    simpa using nontrivialCharacterValue_mul hS hnt hmq hnq
 147  mono := by
 148    intro m n hm hmn
 149    exact le_of_trace_le (nontrivialCharacterValue_principal_on_nat hS hnt m hm)
 150      (nontrivialCharacterValue_principal_on_nat hS hnt n (le_trans hm hmn))
 151      (nontrivialCharacterValue_nat_trace_mono hS hnt hm hmn)
 152
 153/-- **The exponent is a positive integer.** Howe supplies the real exponent, the anchor root
 154makes it positive, and the six exponentials input makes it an integer. This is the only
 155place the import is used. -/
 156theorem exists_nat_exponent (hsix : SixExponentialsTraceInput)
 157    (hS : SansAnchorHypotheses F) (hnt : rationalTrace F 2 ≠ 2) :
 158    ∃ k : ℕ, 1 ≤ k ∧ ∀ n : ℕ, 1 ≤ n →
 159      nontrivialCharacterValue F (n : ℚ) = ((n : ℝ)) ^ k := by
 160  obtain ⟨c, _, hc⟩ := exists_exponent (natChar_monotoneMultiplicative hS hnt)
 161  have h2 : nontrivialCharacterValue F ((2 : ℕ) : ℚ) = anchorRoot F := by
 162    simpa using nontrivialCharacterValue_two hS hnt
 163  have hroot : 1 < anchorRoot F := anchorRoot_gt_one hS hnt
 164  have hc2 : (((2 : ℕ) : ℝ)) ^ c = anchorRoot F := by
 165    rw [← hc 2 (by norm_num), h2]
 166  have hcpos : 0 < c := by
 167    by_contra hle
 168    push_neg at hle
 169    have hmono : (((2 : ℕ) : ℝ)) ^ c ≤ (((2 : ℕ) : ℝ)) ^ (0 : ℝ) :=
 170      Real.rpow_le_rpow_of_exponent_le (by norm_num) hle
 171    rw [Real.rpow_zero, hc2] at hmono
 172    linarith
 173  have htrace : ∀ n : ℕ, 2 ≤ n → n ≤ 5 →
 174      ∃ t : ℚ, ((n : ℝ)) ^ c + (((n : ℝ)) ^ c)⁻¹ = (t : ℝ) := by
 175    intro n hn _
 176    have hnq : ((n : ℕ) : ℚ) ≠ 0 := by exact_mod_cast (show n ≠ 0 by omega)
 177    refine ⟨(nativeCostDoubledTrace F (ratioOrbitOfRat ((n : ℕ) : ℚ))).toRat, ?_⟩
 178    rw [← hc n (by omega), nontrivialCharacterValue_trace hS hnt hnq]
 179    rfl
 180  obtain ⟨k, hk1, hck⟩ := exponent_is_positive_integer hsix hcpos htrace
 181  refine ⟨k, hk1, fun n hn => ?_⟩
 182  rw [hc n hn, hck]
 183  exact Real.rpow_natCast _ _
 184
 185/-- Multiplicativity carries the power law from the integers to every positive rational. -/
 186theorem char_at_pos (hS : SansAnchorHypotheses F) (hnt : rationalTrace F 2 ≠ 2)
 187    {k : ℕ} (hk : ∀ n : ℕ, 1 ≤ n → nontrivialCharacterValue F (n : ℚ) = ((n : ℝ)) ^ k)
 188    {x : ℚ} (hx : 0 < x) :
 189    nontrivialCharacterValue F x = ((x ^ k : ℚ) : ℝ) := by
 190  have hnumpos : 0 < x.num := Rat.num_pos.mpr hx
 191  have hapos : 0 < x.num.toNat := by omega
 192  have hbpos : 0 < x.den := x.pos
 193  have haa : ((x.num.toNat : ℕ) : ℚ) ≠ 0 := by exact_mod_cast hapos.ne'
 194  have hbb : ((x.den : ℕ) : ℚ) ≠ 0 := by exact_mod_cast hbpos.ne'
 195  have hxrep : ((x.num.toNat : ℕ) : ℚ) / ((x.den : ℕ) : ℚ) = x := by
 196    have hnum : ((x.num.toNat : ℕ) : ℚ) = ((x.num : ℤ) : ℚ) := by
 197      exact_mod_cast Int.toNat_of_nonneg (le_of_lt hnumpos)
 198    rw [hnum]
 199    exact Rat.num_div_den x
 200  have hmul := nontrivialCharacterValue_mul hS hnt haa (inv_ne_zero hbb)
 201  rw [← div_eq_mul_inv, hxrep, nontrivialCharacterValue_recip hS hnt hbb,
 202    hk _ hapos, hk _ hbpos] at hmul
 203  have hqk : x ^ k = ((x.num.toNat : ℕ) : ℚ) ^ k / ((x.den : ℕ) : ℚ) ^ k := by
 204    conv_lhs => rw [← hxrep]
 205    rw [div_pow]
 206  rw [hmul, hqk]
 207  push_cast
 208  ring
 209
 210/-- On a positive display the cost is `J` of the `k`-th power. -/
 211theorem cost_at_pos (hS : SansAnchorHypotheses F) (hnt : rationalTrace F 2 ≠ 2)
 212    {k : ℕ} (hk : ∀ n : ℕ, 1 ≤ n → nontrivialCharacterValue F (n : ℚ) = ((n : ℝ)) ^ k)
 213    {q : RatioOrbit} (hq : 0 < q.toRat) :
 214    (F q).toRat = jq (q.toRat ^ k) := by
 215  have hv := char_at_pos hS hnt hk hq
 216  have hd := cost_display hS q
 217  have htr := nontrivialCharacterValue_trace hS hnt (ne_of_gt hq)
 218  have hcast : ((F q).toRat : ℝ) = ((jq (q.toRat ^ k) : ℚ) : ℝ) := by
 219    rw [hd, ← htr, hv]
 220    push_cast [jq]
 221    ring
 222  exact_mod_cast hcast
 223
 224/-- **The nondegenerate branch is a sign-extended power cost.** -/
 225theorem nontrivial_is_signedPower (hS : SansAnchorHypotheses F)
 226    (hnt : rationalTrace F 2 ≠ 2) {k : ℕ} (hk1 : 1 ≤ k)
 227    (hk : ∀ n : ℕ, 1 ≤ n → nontrivialCharacterValue F (n : ℚ) = ((n : ℝ)) ^ k) :
 228    ∀ q : RatioOrbit, RatioOrbit.crossEq (F q) (signedPowerNativeCost (k - 1) q) := by
 229  obtain ⟨m, rfl⟩ : ∃ m : ℕ, k = m + 1 := ⟨k - 1, by omega⟩
 230  intro q
 231  refine dispCross ?_
 232  rw [signedPowerNativeCost_toRat]
 233  simp only [Nat.add_sub_cancel]
 234  rcases lt_trichotomy q.toRat 0 with hneg | hzero | hpos
 235  · have hpospart : (0 : ℚ) < -q.toRat := by linarith
 236    have hp : (F (ratioOrbitOfRat (-q.toRat))).toRat = jq ((-q.toRat) ^ (m + 1)) := by
 237      have h := cost_at_pos hS hnt hk (q := ratioOrbitOfRat (-q.toRat))
 238        (by rw [ratioOrbitOfRat_toRat]; exact hpospart)
 239      rwa [ratioOrbitOfRat_toRat] at h
 240    rw [cost_at_neg hS q, hp, signedPow, abs_of_neg hneg,
 241      show q.toRat * (-q.toRat) ^ m = -((-q.toRat) ^ (m + 1)) by ring, jq_neg]
 242  · rw [cost_at_zero hS hzero, hzero, signedPow_zero_arg]
 243    norm_num [jq]
 244  · rw [cost_at_pos hS hnt hk hpos, signedPow, abs_of_pos hpos]
 245    congr 1
 246    ring
 247
 248/-! ## Nondegeneracy is one equation at one point, and it is strictness
 249
 250The classification admits exponent zero, the sign cost, and that member charges nothing at
 251any positive ratio, so it undercuts `J` without competing with it
 252(`Cost.UnitFromMinimality.exponent_zero_undercuts_everything`). Selection therefore needs a
 253nondegeneracy hypothesis, and the fair objection is that this looks like a new dial: an extra
 254postulate with content of its own, added to rescue the answer.
 255
 256It is not. For an inhabitant of the anchor-free ledger, all of the following are the same
 257condition: it charges something at the single orbit two, it charges something somewhere on
 258the positive ratios, the ledger's monotonicity holds strictly at some pair, and it is not the
 259sign cost. So nondegeneracy adds no surface beyond the strict form of a hypothesis the ledger
 260already carries, and it is decided by one rational equation at one point.
 261
 262None of this needs the six exponentials input or Erdős's theorem. The entire dichotomy is the
 263degenerate branch of the trace at two, which `degenerate_is_signGauge` settled above, so
 264these results are unconditional where the classification is not.
 265
 266What the degenerate member is, stated precisely, because "charges nothing" is the wrong
 267description: `signGauge_sees_orientation_only` says it charges the full reversal penalty at
 268every negative ratio and nothing at every positive one. It is not a cost that is free. It is
 269a cost that records which way a comparison points and never how far apart its sides are. The
 270content of nondegeneracy is that cost sees magnitude. -/
 271
 272/-- Cost vanishes at orbit two exactly when the trace there takes the degenerate value. -/
 273theorem vanishes_at_two_iff_trace_two (hS : SansAnchorHypotheses F) :
 274    (F two).toRat = 0 ↔ rationalTrace F 2 = 2 := by
 275  have hd := cost_display hS two
 276  rw [two_toRat] at hd
 277  constructor
 278  · intro h
 279    rw [h] at hd
 280    push_cast at hd
 281    linarith
 282  · intro h
 283    rw [h] at hd
 284    have hz : ((F two).toRat : ℝ) = 0 := by rw [hd]; norm_num
 285    exact_mod_cast hz
 286
 287/-- **Charging nothing at one point is charging nothing anywhere.** An inhabitant that is
 288free at orbit two is free at every positive ratio, however far apart its sides are. -/
 289theorem vanishes_at_two_iff_flat (hS : SansAnchorHypotheses F) :
 290    (F two).toRat = 0 ↔ ∀ q : RatioOrbit, 0 < q.toRat → (F q).toRat = 0 := by
 291  constructor
 292  · intro h q hq
 293    have hd := cost_display hS q
 294    rw [rationalTrace_pos_eq_two_of_two_eq_two hS ((vanishes_at_two_iff_trace_two hS).mp h) hq]
 295      at hd
 296    have hz : ((F q).toRat : ℝ) = 0 := by rw [hd]; norm_num
 297    exact_mod_cast hz
 298  · intro h
 299    exact h two (by rw [two_toRat]; norm_num)
 300
 301/-- A nondegenerate inhabitant charges a strictly positive amount at orbit two, so the
 302condition may be read as an inequality rather than a disequality. -/
 303theorem charges_positively_at_two (hS : SansAnchorHypotheses F)
 304    (hne : (F two).toRat ≠ 0) : 0 < (F two).toRat := by
 305  have hge : (2 : ℝ) ≤ rationalTrace F 2 := by
 306    have h := IndisputableMonolith.Cost.RealCharacterFactorization.rationalTrace_nat_ge_two hS
 307      (n := 2) (by norm_num)
 308    simpa using h
 309  have hgt : (2 : ℝ) < rationalTrace F 2 :=
 310    lt_of_le_of_ne hge (Ne.symm fun h => hne ((vanishes_at_two_iff_trace_two hS).mpr h))
 311  have hd := cost_display hS two
 312  rw [two_toRat] at hd
 313  have hpos : (0 : ℝ) < ((F two).toRat : ℝ) := by rw [hd]; linarith
 314  exact_mod_cast hpos
 315
 316/-- **Nondegeneracy is the strict form of the ledger's monotonicity.** Charging anything at
 317orbit two is equivalent to the cost order being strict at some pair of positive ratios. The
 318ledger assumes monotonicity non-strictly (`PRCNativeCostMonotone` is `≤ → ≤`), and the only
 319inhabitant that keeps it flat is the sign cost. -/
 320theorem strict_somewhere_iff_charges_at_two (hS : SansAnchorHypotheses F) :
 321    (∃ a b : RatioOrbit, 0 < a.toRat ∧ 0 < b.toRat ∧ a.toRat ≤ b.toRat ∧
 322        (F a).toRat < (F b).toRat)
 323      ↔ (F two).toRat ≠ 0 := by
 324  constructor
 325  · rintro ⟨a, b, ha, hb, -, hlt⟩ hzero
 326    have hflat := (vanishes_at_two_iff_flat hS).mp hzero
 327    rw [hflat a ha, hflat b hb] at hlt
 328    exact absurd hlt (lt_irrefl 0)
 329  · intro hne
 330    refine ⟨RatioOrbit.one, two, ?_, ?_, ?_, ?_⟩
 331    · rw [RatioOrbit.one_toRat]; norm_num
 332    · rw [two_toRat]; norm_num
 333    · rw [RatioOrbit.one_toRat, two_toRat]; norm_num
 334    · rw [hS.base_sans_two.unit_zero, RatioOrbit.zero_toRat]
 335      exact charges_positively_at_two hS hne
 336
 337/-- **Nondegeneracy is exactly the exclusion of the sign cost**, with no reference to
 338exponents and no appeal to the classification. -/
 339theorem charges_at_two_iff_not_signGauge (hS : SansAnchorHypotheses F) :
 340    (F two).toRat ≠ 0 ↔
 341      ¬ ∀ q : RatioOrbit, RatioOrbit.crossEq (F q) (signGaugeNativeCost q) := by
 342  constructor
 343  · intro hne hall
 344    have h := crossDisp (hall two)
 345    rw [signGaugeNativeCost_toRat, two_toRat, signGaugeCostDisplay,
 346      if_pos (by norm_num : (0 : ℚ) < 2)] at h
 347    exact hne h
 348  · intro hnot hzero
 349    exact hnot (degenerate_is_signGauge hS ((vanishes_at_two_iff_trace_two hS).mp hzero))
 350
 351/-- What the degenerate member actually is. It charges the full reversal penalty at every
 352negative ratio and nothing at every positive one: a cost that records orientation and never
 353magnitude. So the nondegeneracy hypothesis is not "assume cost is not free"; it is "assume
 354cost sees how far apart the two sides are". -/
 355theorem signGauge_sees_orientation_only (q : RatioOrbit) :
 356    (0 < q.toRat → (signGaugeNativeCost q).toRat = 0) ∧
 357      (q.toRat < 0 → (signGaugeNativeCost q).toRat = -2) := by
 358  refine ⟨fun hq => ?_, fun hq => ?_⟩
 359  · rw [signGaugeNativeCost_toRat, signGaugeCostDisplay, if_pos hq]
 360  · rw [signGaugeNativeCost_toRat, signGaugeCostDisplay, if_neg (not_lt.mpr hq.le),
 361      if_neg (ne_of_lt hq)]
 362
 363/-! ## The classification -/
 364
 365/-- **The anchor-free gauge classification, on one named import.** Every inhabitant of the
 366anchor-free structural cost ledger is the sign cost or the sign-extended power cost of a
 367nonnegative integer exponent. The only hypothesis is the six exponentials input; the Erdős
 368step is now the theorem `Cost.MonotonePower.exists_exponent`.
 369
 370Two things this does NOT say. It does not say the exponent is odd: both parities are
 371inhabited, by construction in `GaugeOrbitFromRealCharacter`. And it does not select `J`:
 372selection is leastness, which lives in `Cost.UnitFromMinimality`. -/
 373theorem GaugeOrbitIsSignedPowerFamily_of_sixExponentials
 374    (hsix : SixExponentialsTraceInput) : GaugeOrbitIsSignedPowerFamily := by
 375  intro G hG
 376  have hS := realCharacterFactorizationHypotheses_of_structural hG
 377  by_cases htwo : rationalTrace G 2 = 2
 378  · exact Or.inl (degenerate_is_signGauge hS htwo)
 379  · obtain ⟨k, hk1, hk⟩ := exists_nat_exponent hsix hS htwo
 380    exact Or.inr ⟨k - 1, nontrivial_is_signedPower hS htwo hk1 hk⟩
 381
 382/-! ### Axiom audit -/
 383
 384#print axioms degenerate_is_signGauge
 385#print axioms vanishes_at_two_iff_trace_two
 386#print axioms vanishes_at_two_iff_flat
 387#print axioms charges_positively_at_two
 388#print axioms strict_somewhere_iff_charges_at_two
 389#print axioms charges_at_two_iff_not_signGauge
 390#print axioms signGauge_sees_orientation_only
 391#print axioms exists_nat_exponent
 392#print axioms nontrivial_is_signedPower
 393#print axioms GaugeOrbitIsSignedPowerFamily_of_sixExponentials
 394
 395end PRCJCost
 396end PrimitiveRecognitionCalculus
 397end Foundation
 398end IndisputableMonolith
 399

source mirrored from github.com/jonwashburn/shape-of-logic