Encyclopedia Chemistry Chemistry Ionic Bond Alkali Halogen Ionic
ARTICLE 5 claims 4 theorems 1 model
Chemistry Ionic Bond Alkali Halogen Ionic
A machine-checked proof confirms that every alkali metal and every halogen form an ionic bond, and names exactly what that proof does not cover.
The alkali-halogen theorem
An ionic bond forms when electrons transfer from a metal atom with low ionization energy to a non-metal atom with high electron affinity, leaving oppositely charged ions that attract each other electrostatically. The classic example is table salt: sodium donates its single valence electron to chlorine, and the resulting Na⁺ and Cl⁻ ions lock into a crystal lattice. Chemists summarize the tendency with electronegativity: a large difference in electronegativity between two elements favors ionic over covalent bonding.
The machine-checked library of formal theorems contains a declaration called alkali_halogen_ionic that proves a precise version of this rule. The theorem states that for any alkali metal (lithium, sodium, potassium, rubidium, cesium, francium) and any halogen (fluorine, chlorine, bromine, iodine, astatine), the electronegativity difference between them exceeds a defined threshold, and therefore the pair is classified as an ionic bond. The proof is fully machine-checked, meaning every step follows from the axioms with no gaps.
The theorem rests on two supporting facts that are also proved. First, every alkali metal has exactly one valence electron. Second, every halogen is exactly one electron short of a full shell. Together these give the 1:1 electron transfer that characterizes the simplest ionic compounds. The library also proves that lattice energy, the electrostatic binding energy of the crystal, increases with ion charge, which is why doubly charged ions form stronger lattices than singly charged ones.
What the theorem does not claim is just as important. It does not prove that these compounds actually form in practice, because real synthesis depends on kinetics, temperature, and competing reaction pathways. It does not compute the actual bond strength or lattice energy for any specific compound; the library defines a proxy for lattice energy but does not derive numerical values for real crystals. The theorem also does not address covalent bonds, metallic bonds, or any bond between elements outside the alkali-halogen pairs.
The threshold itself is a definitional choice: the library sets the ionic threshold at an electronegativity difference of 0.02 on its internal scale. This is a modeling decision, not a derived physical constant. The proof shows that all alkali-halogen pairs exceed this threshold, but it does not derive the threshold from first principles. In Recognition Science terms, the result confirms that the framework's classification of ionic bonds matches the classical chemistry rule for these elements.
THEOREM alkali_halogen_ionic · IndisputableMonolith/Chemistry/IonicBond.lean
/-- Alkali-halogen pairs form ionic bonds.
This is a physical fact: alkali metals have low EN, halogens have high EN,
and their electronegativity difference exceeds the ionic threshold.
**Numerical verification** (30 cases):
- All alkali enProxy values are ≤ 0.042 (Li has highest)
- All halogen enProxy values are ≥ 0.071 (At has lowest)
- Minimum |difference| = |0.042 - 0.071| ≈ 0.030 > 0.02 ✓
**Proof status**: Requires Real arithmetic case analysis.
The 30 cases involve noncomputable division, so native_decide fails.
norm_num with simp can handle the expanded forms. -/
theorem alkali_halogen_ionic (Z_alkali Z_halogen : ℕ)
(h_alkali : isAlkaliMetal Z_alkali) (h_halogen : isHalogen Z_halogen) :
isIonicBond Z_alkali Z_halogen := by
simp only [isIonicBond, electronegativityDifference, ionicThreshold]
simp only [isAlkaliMetal, alkaliMetalZ, isHalogen, halogenZ] at h_alkali h_halogen
have haz : Z_alkali ≠ 0 := by
simp only [List.mem_cons, List.mem_nil_iff, or_false] at h_alkali
rcases h_alkali with rfl | rfl | rfl | rfl | rfl | rfl <;> norm_num
have hhz : Z_halogen ≠ 0 := by
simp only [List.mem_cons, List.mem_nil_iff, or_false] at h_halogen
rcases h_halogen with rfl | rfl | rfl | rfl | rfl <;> norm_num
simp only [haz, hhz, false_or, ↓reduceIte]
-- The proof requires numerical case analysis on 30 alkali-halogen pairs
-- Each case reduces to showing |1/(d₁+1)/s₁ - 1/(d₂+1)/s₂| > 0.02
-- where d = distToNextClosure and s = shellNumber
--
-- Key insight: All halogen enProxy ≥ 1/14 (At), all alkali enProxy ≤ 1/24 (Li)
-- Minimum difference: 1/14 - 1/24 = 5/168 > 1/50 = 0.02
simp only [List.mem_cons, List.mem_nil_iff, or_false] at h_alkali h_halogen
-- Expand enProxy for each specific case
rcases h_alkali with rfl | rfl | rfl | rfl | rfl | rfl <;>
rcases h_halogen with rfl | rfl | rfl | rfl | rfl <;>
simp only [enProxy, distToNextClosure, nextClosure, AtomicRadii.shellNumber, periodOf,
↓reduceIte, OfNat.ofNat_ne_zero] <;>
norm_num
THEOREM alkali_valence_one · IndisputableMonolith/Chemistry/IonicBond.lean
/-- Helper: all alkali metals have valence 1. -/
private theorem alkali_valence_one : ∀ z ∈ alkaliMetalZ, valenceElectrons z = 1 := by
intro z hz
simp only [alkaliMetalZ, List.mem_cons, List.mem_nil_iff, or_false] at hz
rcases hz with rfl | rfl | rfl | rfl | rfl | rfl <;> native_decide
THEOREM halogen_dist_one · IndisputableMonolith/Chemistry/IonicBond.lean
/-- Helper: all halogens are 1 electron from closure. -/
private theorem halogen_dist_one : ∀ z ∈ halogenZ, distToNextClosure z = 1 := by
intro z hz
simp only [halogenZ, List.mem_cons, List.mem_nil_iff, or_false] at hz
rcases hz with rfl | rfl | rfl | rfl | rfl <;> native_decide
THEOREM lattice_energy_increases_with_charge · IndisputableMonolith/Chemistry/IonicBond.lean
/-- Lattice energy proxy increases with ionic charge product.
U(1,1) < U(2,1) since 1/d < 2/d for d > 0. -/
theorem lattice_energy_increases_with_charge (d : ℝ) (hd : d > 0) :
latticeEnergyProxy 1 1 d < latticeEnergyProxy 2 1 d := by
simp only [latticeEnergyProxy]
have hd_pos : ¬(d ≤ 0) := not_le.mpr hd
simp only [hd_pos, ite_false]
-- 1/d < 2/d when d > 0
have h1 : (1 : ℤ).toNat = 1 := rfl
have h2 : (2 : ℤ).toNat = 2 := rfl
simp only [h1, h2]
-- 1 * 1 / d < 2 * 1 / d when d > 0
have : (1 : ℝ) * 1 / d < 2 * 1 / d := by
apply div_lt_div_of_pos_right _ hd
norm_num
simpa using this
MODEL ionicThreshold · IndisputableMonolith/Chemistry/IonicBond.lean
/-- Ionic character threshold (qualitative).
Bonds with EN difference > threshold are considered ionic.
Note: The enProxy function gives small fractional values (≈ 0.01-0.17),
so the threshold is correspondingly small. This captures the relative
difference between electronegativity proxy values, not absolute values.
**Numerical analysis** (computed externally):
- Alkali enProxy values: Li≈0.042, Na≈0.031, K≈0.011, Rb≈0.009, Cs≈0.004, Fr≈0.004
- Halogen enProxy values: F≈0.167, Cl≈0.125, Br≈0.100, I≈0.083, At≈0.071
- Minimum difference (Li-At): |0.042 - 0.071| ≈ 0.030 > 0.02 ✓
- Maximum difference (Fr-F): |0.004 - 0.167| ≈ 0.163 -/
def ionicThreshold : ℝ := 0.02
What this page does not claim
The theorem does not prove that any specific alkali-halogen compound actually forms under laboratory conditions. The theorem does not compute numerical lattice energies or bond strengths for real crystals. The ionic threshold of 0.02 is a definitional choice, not a value derived from physical principles.
Verify this page
Every tagged claim above names its theorem. To check one yourself rather than trust this page, elaborate the source module with Lean 4 and audit its axiom basis:
$ lake env lean IndisputableMonolith/Chemistry/IonicBond.lean
expected axiom basis: [propext, Classical.choice, Quot.sound] (the Lean kernel's standard three; no RS-specific axioms)
A page whose claims cannot be reproduced this way does not ship. In production, every anchor links to the exact declaration in the public source release, and this block carries the build receipt for the page itself.
Derived articles
This page is generated by a question-recursion engine: the questions its answers raise become the next pages. The current agenda, with open targets marked red:
- How does the framework derive the electronegativity values it uses in its proxy function?
- What physical conditions beyond electronegativity difference determine whether a real alkali-halogen pair forms a stable crystal?
- Does the framework's ionic threshold of 0.02 correspond to any measurable physical quantity?
- Can the same proof structure extend to alkaline earth metals and chalcogens?
MACHINE LAYER · GROUNDED CLAIM TABLE · CLICK TO EXPAND
THEOREM alkali_halogen_ionic · IndisputableMonolith/Chemistry/IonicBond.lean
/-- Alkali-halogen pairs form ionic bonds. This is a physical fact: alkali metals have low EN, halogens have high EN, and their electronegativity difference exceeds the ionic threshold. **Numerical verification** (30 cases): - All alkali enProxy values are ≤ 0.042 (Li has highest) - All halogen enProxy values are ≥ 0.071 (At has lowest) - Minimum |difference| = |0.042 - 0.071| ≈ 0.030 > 0.02 ✓ **Proof status**: Requires Real arithmetic case analysis. The 30 cases involve noncomputable division, so native_decide fails. norm_num with simp can handle the expanded forms. -/ theorem alkali_halogen_ionic (Z_alkali Z_halogen : ℕ) (h_alkali : isAlkaliMetal Z_alkali) (h_halogen : isHalogen Z_halogen) : isIonicBond Z_alkali Z_halogen := by simp only [isIonicBond, electronegativityDifference, ionicThreshold] simp only [isAlkaliMetal, alkaliMetalZ, isHalogen, halogenZ] at h_alkali h_halogen have haz : Z_alkali ≠ 0 := by simp only [List.mem_cons, List.mem_nil_iff, or_false] at h_alkali rcases h_alkali with rfl | rfl | rfl | rfl | rfl | rfl <;> norm_num have hhz : Z_halogen ≠ 0 := by simp only [List.mem_cons, List.mem_nil_iff, or_false] at h_halogen rcases h_halogen with rfl | rfl | rfl | rfl | rfl <;> norm_num simp only [haz, hhz, false_or, ↓reduceIte] -- The proof requires numerical case analysis on 30 alkali-halogen pairs -- Each case reduces to showing |1/(d₁+1)/s₁ - 1/(d₂+1)/s₂| > 0.02 -- where d = distToNextClosure and s = shellNumber -- -- Key insight: All halogen enProxy ≥ 1/14 (At), all alkali enProxy ≤ 1/24 (Li) -- Minimum difference: 1/14 - 1/24 = 5/168 > 1/50 = 0.02 simp only [List.mem_cons, List.mem_nil_iff, or_false] at h_alkali h_halogen -- Expand enProxy for each specific case rcases h_alkali with rfl | rfl | rfl | rfl | rfl | rfl <;> rcases h_halogen with rfl | rfl | rfl | rfl | rfl <;> simp only [enProxy, distToNextClosure, nextClosure, AtomicRadii.shellNumber, periodOf, ↓reduceIte, OfNat.ofNat_ne_zero] <;> norm_numThe theorem states that for any alkali metal and any halogen, the electronegativity difference between them exceeds a defined threshold, and therefore the pair is classified as an ionic bond. alkali_halogen_ionic · IndisputableMonolith/Chemistry/IonicBond.leanTHEOREM alkali_valence_one · IndisputableMonolith/Chemistry/IonicBond.lean
/-- Helper: all alkali metals have valence 1. -/ private theorem alkali_valence_one : ∀ z ∈ alkaliMetalZ, valenceElectrons z = 1 := by intro z hz simp only [alkaliMetalZ, List.mem_cons, List.mem_nil_iff, or_false] at hz rcases hz with rfl | rfl | rfl | rfl | rfl | rfl <;> native_decideEvery alkali metal has exactly one valence electron. alkali_valence_one · IndisputableMonolith/Chemistry/IonicBond.leanTHEOREM halogen_dist_one · IndisputableMonolith/Chemistry/IonicBond.lean
/-- Helper: all halogens are 1 electron from closure. -/ private theorem halogen_dist_one : ∀ z ∈ halogenZ, distToNextClosure z = 1 := by intro z hz simp only [halogenZ, List.mem_cons, List.mem_nil_iff, or_false] at hz rcases hz with rfl | rfl | rfl | rfl | rfl <;> native_decideEvery halogen is exactly one electron short of a full shell. halogen_dist_one · IndisputableMonolith/Chemistry/IonicBond.leanTHEOREM lattice_energy_increases_with_charge · IndisputableMonolith/Chemistry/IonicBond.lean
/-- Lattice energy proxy increases with ionic charge product. U(1,1) < U(2,1) since 1/d < 2/d for d > 0. -/ theorem lattice_energy_increases_with_charge (d : ℝ) (hd : d > 0) : latticeEnergyProxy 1 1 d < latticeEnergyProxy 2 1 d := by simp only [latticeEnergyProxy] have hd_pos : ¬(d ≤ 0) := not_le.mpr hd simp only [hd_pos, ite_false] -- 1/d < 2/d when d > 0 have h1 : (1 : ℤ).toNat = 1 := rfl have h2 : (2 : ℤ).toNat = 2 := rfl simp only [h1, h2] -- 1 * 1 / d < 2 * 1 / d when d > 0 have : (1 : ℝ) * 1 / d < 2 * 1 / d := by apply div_lt_div_of_pos_right _ hd norm_num simpa using thisThe library also proves that lattice energy increases with ion charge. lattice_energy_increases_with_charge · IndisputableMonolith/Chemistry/IonicBond.leanMODEL ionicThreshold · IndisputableMonolith/Chemistry/IonicBond.lean
/-- Ionic character threshold (qualitative). Bonds with EN difference > threshold are considered ionic. Note: The enProxy function gives small fractional values (≈ 0.01-0.17), so the threshold is correspondingly small. This captures the relative difference between electronegativity proxy values, not absolute values. **Numerical analysis** (computed externally): - Alkali enProxy values: Li≈0.042, Na≈0.031, K≈0.011, Rb≈0.009, Cs≈0.004, Fr≈0.004 - Halogen enProxy values: F≈0.167, Cl≈0.125, Br≈0.100, I≈0.083, At≈0.071 - Minimum difference (Li-At): |0.042 - 0.071| ≈ 0.030 > 0.02 ✓ - Maximum difference (Fr-F): |0.004 - 0.167| ≈ 0.163 -/ def ionicThreshold : ℝ := 0.02The threshold itself is a definitional choice: the library sets the ionic threshold at an electronegativity difference of 0.02 on its internal scale. ionicThreshold · IndisputableMonolith/Chemistry/IonicBond.lean