solvlabs.co , Savelii K.

"[The history of] mathematics is, to a large extent, invention of better notations" - Feynman Lectures on Physics

Purely illustrative example: if two groups of cells from different biological conditions but processed in the same batch show distinct gene expression signatures, then they represent different cell types or states.

-- Import required libraries. In a real-world case, you may need to import or define 
-- additional mathematical structures.
import data.real.basic

-- Define axioms
axiom CellIndependence (Cell : Type) : Prop
axiom GeneExpression (Cell : Type) : Cell → ℝ
axiom NoiseModelable : Prop
axiom UniqueSignature (CellType : Type) : Prop
axiom BatchEffect : Prop

-- Define your theorem
theorem DifferentSignaturesImplyDifferentTypes
  (Cell : Type) (C1 C2 : set Cell) (Condition1 Condition2 : Prop)
  (SameBatch : Prop) : Prop :=
begin
  -- Here something like Magnushammer or ReProver 
	-- would attempt to perform a formal proof.
  sorry
end

Some further exploration:

<aside> 👩‍🔬 is there isomorphism between methematics and programming?

</aside>

Yes, there are isomorphisms between certain aspects of mathematics and programming. For example, category theory in mathematics has correspondences with functional programming concepts like functors and monads. Lambda calculus serves as a foundation for functional programming languages. Boolean algebra is directly applicable in digital circuit design and programming logic. However, the two disciplines are not completely isomorphic; they have different goals and methodologies.

<aside> 👩‍🔬 how does it relate to Lean?

</aside>

Lean is a theorem prover and programming language designed to formalize mathematical proofs. It provides a platform where the isomorphisms between mathematics and programming are explicitly realized. It uses a dependent type theory as its logical foundation, incorporating elements from both mathematics (like set theory and formal logic) and computer science (like type theory).

In Lean, mathematical objects and theorems are represented in a formal language, and proofs can be constructed interactively. These proofs are verified by the Lean kernel, ensuring they are logically sound. This connects to the "program as proof" paradigm seen in languages based on the Curry-Howard isomorphism, which establishes a correspondence between computer programs and mathematical proofs.

So, Lean is a direct example of how concepts in mathematics and programming can be mapped onto each other.

<aside> 👩‍🔬 how Lean is different from Isabelle and Coq

</aside>

Lean, Isabelle, and Coq are all interactive theorem provers, but they differ in their logical foundations, design philosophies, and feature sets. Here's a quick rundown:

  1. Logical Foundation:
  2. User Experience and Ecosystem:
  3. Automation:
  4. Community and Application:
  5. Interoperability and Code Extraction:

Each has its own strengths and weaknesses, and the best choice often depends on the specific requirements of a project.