Cached proof nodes for conjugacy-invariant length bounds #
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
- LeanPool.Polylean.instBEqProofNode.beq LeanPool.Polylean.ProofNode.empty LeanPool.Polylean.ProofNode.empty = true
- LeanPool.Polylean.instBEqProofNode.beq (LeanPool.Polylean.ProofNode.gen a) (LeanPool.Polylean.ProofNode.gen b) = (a == b)
- LeanPool.Polylean.instBEqProofNode.beq (LeanPool.Polylean.ProofNode.triang a a_1) (LeanPool.Polylean.ProofNode.triang b b_1) = (a == b && a_1 == b_1)
- LeanPool.Polylean.instBEqProofNode.beq (LeanPool.Polylean.ProofNode.conj a a_1) (LeanPool.Polylean.ProofNode.conj b b_1) = (a == b && a_1 == b_1)
- LeanPool.Polylean.instBEqProofNode.beq (LeanPool.Polylean.ProofNode.power a a_1) (LeanPool.Polylean.ProofNode.power b b_1) = (a == b && a_1 == b_1)
- LeanPool.Polylean.instBEqProofNode.beq x✝¹ x✝ = false
Instances For
Equations
The word whose length bound is justified by a proof node.
Equations
- LeanPool.Polylean.ProofNode.empty.top = #[]
- (LeanPool.Polylean.ProofNode.gen l).top = #[l]
- (LeanPool.Polylean.ProofNode.triang w₁ w₂).top = w₁ ++ w₂
- (LeanPool.Polylean.ProofNode.conj l w).top = w ^ l
- (LeanPool.Polylean.ProofNode.power n w).top = w
Instances For
Render a proof node as a human-readable proof step.
Equations
- One or more equations did not get rendered due to their size.
- LeanPool.Polylean.ProofNode.empty.toString = "l(e) = 0 (trivial word)"
- (LeanPool.Polylean.ProofNode.gen l).toString = toString "l(" ++ toString l ++ toString ") = 1 (normalization)"
- (LeanPool.Polylean.ProofNode.conj l w).toString = toString "l(" ++ toString w ++ toString "^" ++ toString l ++ toString ") = l(" ++ toString w ++ toString ") (conjugacy invariance)"
- (LeanPool.Polylean.ProofNode.power n w).toString = toString "l(w) ≤ l(" ++ toString (w ^ n) ++ toString ")/" ++ toString n ++ toString " (homogeneity)"
Instances For
Equations
The previously derived words needed by this proof node.
Equations
Instances For
Length immediately justified by a base proof node, if any.
Equations
Instances For
Cache of floating-point length bounds for array-backed words.
Cache of proof nodes witnessing the best known bound for each word.
Look up a cached floating-point length bound.
Equations
- LeanPool.Polylean.cachedLength w = do let cache ← ST.Ref.get LeanPool.Polylean.floatNormCache match cache.get? w with | some n => pure (some n) | none => pure none
Instances For
Compute a floating-point length bound while caching the proof nodes used.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Recursively expand cached proof nodes with a bounded traversal fuel.
Equations
Instances For
Recursively expand cached proof nodes needed to justify a word.
Equations
- LeanPool.Polylean.resolveProof w = do let cache ← ST.Ref.get LeanPool.Polylean.proofCache LeanPool.Polylean.resolveProofWithFuel (cache.size + 1) w
Instances For
Recompute a derived length with a bounded traversal fuel.
Equations
- One or more equations did not get rendered due to their size.
- LeanPool.Polylean.derivedLengthWithFuel 0 x✝ = throw (IO.userError (toString "proof cache recursion exhausted at " ++ toString x✝))
Instances For
Recompute the derived length from cached proof nodes, panicking if a node is absent.
Equations
- LeanPool.Polylean.derivedLength w = do let cache ← ST.Ref.get LeanPool.Polylean.proofCache LeanPool.Polylean.derivedLengthWithFuel (cache.size + 1) w
Instances For
Recompute a derived length proof with a bounded traversal fuel.
Equations
- One or more equations did not get rendered due to their size.
- LeanPool.Polylean.derivedProofWithFuel 0 x✝ = throw (IO.userError (toString "proof cache recursion exhausted at " ++ toString x✝))
Instances For
Recompute the derived length together with the list of proof nodes used.
Equations
- LeanPool.Polylean.derivedProof w = do let cache ← ST.Ref.get LeanPool.Polylean.proofCache LeanPool.Polylean.derivedProofWithFuel (cache.size + 1) w