Pith. sign in

IndisputableMonolith.Foundation.PrimitiveRecognitionCalculus.Grow.SignedOrbitLeProductRightFactorIffOfBalancedChoiceFree

IndisputableMonolith/Foundation/PrimitiveRecognitionCalculus/Grow/SignedOrbitLeProductRightFactorIffOfBalancedChoiceFree.lean · 26 lines · 2 declarations

show as:
view math explainer →

open module explainer GitHub source

Explainer status: pending

   1import IndisputableMonolith.Foundation.PrimitiveRecognitionCalculus.IntegerRational
   2import IndisputableMonolith.Foundation.PrimitiveRecognitionCalculus.IntegerOrder
   3import IndisputableMonolith.Foundation.PrimitiveRecognitionCalculus.Grow.RatioOrbitLeReflTotal
   4import IndisputableMonolith.Foundation.PrimitiveRecognitionCalculus.Orbit
   5import IndisputableMonolith.Foundation.PrimitiveRecognitionCalculus.Grow.SignedOrbitLeCongrLeftOfBalancedChoiceFree
   6
   7namespace IndisputableMonolith.PRCGrow.SignedOrbitLeProductRightFactorIffOfBalancedChoiceFree
   8
   9open IndisputableMonolith.Foundation.PrimitiveRecognitionCalculus
  10open IndisputableMonolith.PRCGrow.SignedOrbitLeCongrLeftOfBalancedChoiceFree
  11
  12theorem mul_balanced_congr_right_cf {a b b' : SignedOrbit} (hb : SignedOrbit.balanced b b') : SignedOrbit.balanced (SignedOrbit.mul a b) (SignedOrbit.mul a b') := by
  13  rw [SignedOrbit.balanced_iff_toNat_eq] at hb ⊢
  14  simp only [SignedOrbit.mul_pos, SignedOrbit.mul_neg, DistinctionNat.toNat_add, DistinctionNat.toNat_mul]
  15  have hb2 : b.neg.toNat + b'.pos.toNat = b'.neg.toNat + b.pos.toNat := by omega
  16  have e1 : a.pos.toNat * b.pos.toNat + a.pos.toNat * b'.neg.toNat = a.pos.toNat * b'.pos.toNat + a.pos.toNat * b.neg.toNat := by
  17    rw [← Nat.mul_add, ← Nat.mul_add, hb]
  18  have e2 : a.neg.toNat * b.neg.toNat + a.neg.toNat * b'.pos.toNat = a.neg.toNat * b'.neg.toNat + a.neg.toNat * b.pos.toNat := by
  19    rw [← Nat.mul_add, ← Nat.mul_add, hb2]
  20  omega
  21
  22theorem le_product_right_factor_iff_of_balanced_cf {a b b' c : SignedOrbit} (hb : SignedOrbit.balanced b b') : SignedOrbit.le (SignedOrbit.mul a b) c ↔ SignedOrbit.le (SignedOrbit.mul a b') c :=
  23  le_congr_left_of_balanced_cf (mul_balanced_congr_right_cf hb)
  24
  25end IndisputableMonolith.PRCGrow.SignedOrbitLeProductRightFactorIffOfBalancedChoiceFree
  26

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