Pith. sign in

IndisputableMonolith.Chemistry.OxidationStatesDerived

IndisputableMonolith/Chemistry/OxidationStatesDerived.lean · 77 lines · 10 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: pending

   1import Mathlib
   2import IndisputableMonolith.Chemistry.OxidationStateFromConfigDim
   3
   4/-!
   5# Derived Oxidation-State Targets
   6
   7This module is Phase 8B of the periodic-table closure plan.
   8
   9The existing `OxidationStateFromConfigDim` module proves the count-law spine.
  10This file installs the chemistry-facing target table for accessible oxidation
  11states, starting with the acceptance cases in the plan: Fe and Mn.
  12
  13The definitions are still target-level for the selected elements. The next
  14theorem must derive these lists from valence occupation plus J-cost removal.
  15-/
  16
  17namespace IndisputableMonolith.Chemistry.OxidationStatesDerived
  18
  19open IndisputableMonolith.Chemistry
  20
  21/-- Target accessible oxidation states for selected elements. -/
  22def accessibleOxidationStates (Z : Nat) : List Int :=
  23  if Z = 26 then [0, 2, 3, 6]
  24  else if Z = 25 then [-1, 0, 2, 3, 4, 6, 7]
  25  else []
  26
  27/-- Iron's accessible oxidation states in the Phase 8 target table. -/
  28theorem iron_oxidation_states :
  29    accessibleOxidationStates 26 = [0, 2, 3, 6] := by
  30  native_decide
  31
  32/-- Manganese reaches +7. -/
  33theorem manganese_max_seven :
  34    (7 : Int) ∈ accessibleOxidationStates 25 := by
  35  native_decide
  36
  37/-- The manganese target list has the canonical seven common states. -/
  38theorem manganese_state_count :
  39    (accessibleOxidationStates 25).length = 7 := by
  40  native_decide
  41
  42/-- Iron's target list has no duplicate oxidation states. -/
  43theorem iron_oxidation_states_nodup :
  44    (accessibleOxidationStates 26).Nodup := by
  45  native_decide
  46
  47/-- Manganese's target list has no duplicate oxidation states. -/
  48theorem manganese_oxidation_states_nodup :
  49    (accessibleOxidationStates 25).Nodup := by
  50  native_decide
  51
  52/-- The count-law oxidation certificate remains available. -/
  53theorem oxidation_count_law_available :
  54    Nonempty OxidationStateFromConfigDim.OxidationStateCert :=
  55  OxidationStateFromConfigDim.cert_inhabited
  56
  57/-- Phase 8B certificate: oxidation-state targets are installed. -/
  58structure OxidationStatesDerivedCert : Prop where
  59  iron_exact : accessibleOxidationStates 26 = [0, 2, 3, 6]
  60  manganese_reaches_seven : (7 : Int) ∈ accessibleOxidationStates 25
  61  manganese_count : (accessibleOxidationStates 25).length = 7
  62  iron_nodup : (accessibleOxidationStates 26).Nodup
  63  manganese_nodup : (accessibleOxidationStates 25).Nodup
  64  count_law : Nonempty OxidationStateFromConfigDim.OxidationStateCert
  65
  66/-- The Phase 8B oxidation-state target layer is certified. -/
  67theorem oxidation_states_derived_certified :
  68    OxidationStatesDerivedCert where
  69  iron_exact := iron_oxidation_states
  70  manganese_reaches_seven := manganese_max_seven
  71  manganese_count := manganese_state_count
  72  iron_nodup := iron_oxidation_states_nodup
  73  manganese_nodup := manganese_oxidation_states_nodup
  74  count_law := oxidation_count_law_available
  75
  76end IndisputableMonolith.Chemistry.OxidationStatesDerived
  77

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