Hydrophobic-polar protein folding model: main theoretical development #
A treatment of the hydrophobic-polar protein folding model in a generality
that covers rectangular, triangular and hexagonal lattices: P_rect
, P_tri
, P_hex
.
We formalize the non-monotonicity of the objective function, refuting an unpublished conjecture of Stecher.
We prove objective function bounds:
P_tri ≤ P_rect ≤ P_hex
(using a theory of embeddings)
and for any model, P ≤ b * l
and P ≤ l * (l-1)/2
[see pts_earned_bound_loc'
]
(The latter is worth keeping when l ≤ 2b+1
.)
where b
is the number of moves and l
is the word length.
We also prove P ≤ b * l / 2
using "handshake lemma" type reasoning
that was pointed out in Agarwala, Batzoglou et al. (RECOMB 97
, Lemma 2.1)
and a symmetry assumption on the folding model that holds for rect
and hex
but not for tri
.
The latter result required improving our definitions.
We prove the correctness of our backtracking algorithm for protein folding.
To prove some results about rotations
(we can always assume our fold starts by going to the right)
we use the type
Fin n → α
instead of Vector α n
.
Equations
- morf f v = Mathlib.Vector.map f v
Instances For
.
.
.
Instances For
This is needed to get the Handshake Lemma bound from Agarwal et al.'s paper, but it is also just a nicer definition. March 13, 2024. think "ik = (i,k)"
Equations
- points_tot go ph fold = (Finset.filter (fun (ik : Fin l × Fin l) => pt_loc go fold ik.1 ik.2 ph = true) Finset.univ).card
Instances For
In order to use the handshaking lemma from https://leanprover-community.github.io/mathlib4_docs/Mathlib/Combinatorics/SimpleGraph/DegreeSum.html#SimpleGraph.sum_degrees_eq_twice_card_edges Bonds: https://leanprover-community.github.io/mathlib4_docs/Mathlib/Combinatorics/SimpleGraph/Dart.html#SimpleGraph.Dart we may introduce this: note that we form a graph on the amino acids rather than on the ambient space.
Equations
Instances For
.
Equations
Instances For
Write points_tot
as a disjoint union over ik.2
to prove. March 14, 2024
.
.
Equations
- pts_at_improved go k ph fold = (Finset.filter (fun (i : Fin (↑k).pred) => pt_loc go fold (Fin_trans_pred i) k ph = true) Finset.univ).card
Instances For
.
can make this i.pred I think
.
The result pts_earned_bound_loc'_improved
is sharp in that for l=2
,
we have words of length 3
and the points bound is 1
,
which does in fact happen for hex fold. April 2, 2024
.
.
Instances For
.
Equations
Instances For
.
.
.
left_injective f which we can prove for tri_rect_embedding although it's harder than left_injective_tri!
location, direction
.
This trivial instance is nonetheless needed.
.
Almost obsolete, except for rect₃
fold which is not symmetric so that Handshake Lemma
reasoning does not apply.
.
.
Equations
- instDecidableLeft_injectiveFinOfNatNatG = id inferInstance
.
Equations
- instDecidableRight_injectiveFinOfNatNatG = id inferInstance
.
this is anyway obsolete since Handshake lemma gives another /2 factor
.
.
.
Equations
- path_transformedᵥ f go₀ go₁ v = pathᵥ go₁ (morphᵥ f go₀ v)
Instances For
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
This version of pts_tot_bound is correct even for the asymmetric 3-move version of rect:
Equations
- One or more equations did not get rendered due to their size.
Instances For
.
Equations
- instDecidablePredNatPts_tot_bound go = id (id inferInstance)
.
Equations
- instDecidablePredNatPts_tot_bound_1 go = id (id inferInstance)
.
Equations
- instDecidablePredNatPts_tot_bound_rev go = id (id inferInstance)
.
Equations
- instDecidablePredNatPts_tot_bound_rev_1 go = id (id inferInstance)
.
.
.
.