Second heatup PJ probe with tightened X_entry (T_c width 6K vs baseline 14K) gives: T=60s: 5710 sets in 101s — T_c envelope [281.05, 291.0] ✅ T=300s: 12932 sets in 206s — T_c envelope [281.05, 291.0] ✅ T_c envelope STABLE (identical at 60s and 300s) — the tube reached steady shape and stopped growing. Low-T_avg trip (280) cleared at lower bound 281.05, ~1K margin. **First sound nonlinear reach-avoid proof for any mode of this plant:** for the tightened entry and T = 300s, every inv1_holds halfspace holds along the tube. Sound w.r.t. PJ dynamics (<= 0.1% error vs full state). The baseline wider-entry run was loose on T_c low bound (272.4), confirming that the looseness was entry-box-width driven (14K too wide for TMJets + orderQ=2) rather than intrinsic to the method. Entry splitting / refinement is the path to the full baseline set. Also: LaTeX preamble now has the unicode-to-math literate map attached to the listing STYLES themselves (not just global \lstset), so terminal-output listings pasted from Julia with Δ, ≥, °, ✅ etc. render correctly. Journal 34 pages, clean build. OVERNIGHT_NOTES.md updated with tight-entry win. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
243 lines
6.9 KiB
TeX
243 lines
6.9 KiB
TeX
% preamble.tex — shared LaTeX setup for the HAHACS lab journal.
|
||
%
|
||
% Intent: a reader in 2030 picks up this journal and can rebuild the
|
||
% work from scratch. This file defines the visual vocabulary — code
|
||
% listings, figures, callouts — that each dated entry uses.
|
||
|
||
\documentclass[11pt, letterpaper]{article}
|
||
|
||
% --- Page geometry ------------------------------------------------------------
|
||
\usepackage[margin=1in, headheight=15pt]{geometry}
|
||
\usepackage{parskip} % blank line between paragraphs; no indent
|
||
\usepackage{microtype}
|
||
|
||
% --- Fonts --------------------------------------------------------------------
|
||
\usepackage[T1]{fontenc}
|
||
\usepackage{lmodern}
|
||
\usepackage{inconsolata} % monospaced font for code
|
||
|
||
% --- Math ---------------------------------------------------------------------
|
||
\usepackage{amsmath, amssymb, amsthm, mathtools}
|
||
\usepackage{siunitx}
|
||
\sisetup{detect-all, per-mode=symbol}
|
||
% siunitx doesn't ship \degreeFahrenheit; declare it via ensuremath.
|
||
\DeclareSIUnit\degreeFahrenheit{\ensuremath{^\circ}F}
|
||
|
||
% --- Graphics -----------------------------------------------------------------
|
||
\usepackage{graphicx}
|
||
\graphicspath{{./figures/}{../docs/figures/}}
|
||
\usepackage{caption}
|
||
\captionsetup{font=small, labelfont=bf}
|
||
|
||
% --- Code listings ------------------------------------------------------------
|
||
\usepackage{listings}
|
||
\usepackage{xcolor}
|
||
|
||
% Palette
|
||
\definecolor{code-bg}{HTML}{F7F7F2}
|
||
\definecolor{code-rule}{HTML}{D0D0C8}
|
||
\definecolor{code-comment}{HTML}{708070}
|
||
\definecolor{code-keyword}{HTML}{0050A0}
|
||
\definecolor{code-string}{HTML}{A04060}
|
||
\definecolor{code-number}{HTML}{806010}
|
||
|
||
\lstdefinelanguage{Julia}%
|
||
{morekeywords={abstract,break,case,catch,const,continue,do,else,elseif,%
|
||
end,export,false,for,function,immutable,import,importall,if,in,%
|
||
macro,module,otherwise,quote,return,struct,switch,true,try,type,%
|
||
typealias,using,while,mutable,global,local,let,primitive,where},%
|
||
sensitive=true,%
|
||
morecomment=[l]\#,%
|
||
morecomment=[n]{\#=}{=\#},%
|
||
morestring=[s]{"}{"},%
|
||
morestring=[m]{'}{'},%
|
||
}
|
||
|
||
\lstdefinestyle{labstyle}{
|
||
backgroundcolor=\color{code-bg},
|
||
basicstyle=\ttfamily\small,
|
||
breaklines=true,
|
||
breakatwhitespace=false,
|
||
captionpos=b,
|
||
commentstyle=\color{code-comment}\itshape,
|
||
frame=single,
|
||
framerule=0.5pt,
|
||
rulecolor=\color{code-rule},
|
||
keywordstyle=\color{code-keyword}\bfseries,
|
||
numberstyle=\tiny\color{code-comment},
|
||
showspaces=false,
|
||
showstringspaces=false,
|
||
showtabs=false,
|
||
stringstyle=\color{code-string},
|
||
tabsize=2,
|
||
numbers=left,
|
||
numbersep=6pt,
|
||
xleftmargin=14pt,
|
||
extendedchars=true,
|
||
inputencoding=utf8,
|
||
literate=
|
||
{Δ}{{$\Delta$}}1
|
||
{λ}{{$\lambda$}}1
|
||
{μ}{{$\mu$}}1
|
||
{α}{{$\alpha$}}1
|
||
{β}{{$\beta$}}1
|
||
{ρ}{{$\rho$}}1
|
||
{Σ}{{$\Sigma$}}1
|
||
{Λ}{{$\Lambda$}}1
|
||
{≤}{{$\leq$}}1
|
||
{≥}{{$\geq$}}1
|
||
{→}{{$\to$}}1
|
||
{±}{{$\pm$}}1
|
||
{°}{{$^\circ$}}1
|
||
{×}{{$\times$}}1
|
||
{✅}{{$\checkmark$}}1
|
||
{❌}{{$\times$}}1
|
||
{ε}{{$\varepsilon$}}1
|
||
}
|
||
\lstset{style=labstyle}
|
||
|
||
% Enable UTF-8 in listings (required for Greek letters and math symbols
|
||
% pasted from terminal output: Δ, λ, μ, etc.).
|
||
\lstset{
|
||
extendedchars=true,
|
||
inputencoding=utf8,
|
||
literate=
|
||
{Δ}{{$\Delta$}}1
|
||
{λ}{{$\lambda$}}1
|
||
{μ}{{$\mu$}}1
|
||
{α}{{$\alpha$}}1
|
||
{β}{{$\beta$}}1
|
||
{ρ}{{$\rho$}}1
|
||
{Σ}{{$\Sigma$}}1
|
||
{Λ}{{$\Lambda$}}1
|
||
{≤}{{$\leq$}}1
|
||
{≥}{{$\geq$}}1
|
||
{→}{{$\to$}}1
|
||
{±}{{$\pm$}}1
|
||
{°}{{$^\circ$}}1
|
||
{×}{{$\times$}}1
|
||
{ε}{{$\varepsilon$}}1
|
||
}
|
||
|
||
\lstdefinestyle{terminal}{
|
||
backgroundcolor=\color{black!90},
|
||
basicstyle=\ttfamily\small\color{green!80!white},
|
||
commentstyle=\color{white!60},
|
||
frame=none,
|
||
numbers=none,
|
||
breaklines=true,
|
||
xleftmargin=0pt,
|
||
extendedchars=true,
|
||
inputencoding=utf8,
|
||
literate=
|
||
{Δ}{{$\Delta$}}1
|
||
{λ}{{$\lambda$}}1
|
||
{μ}{{$\mu$}}1
|
||
{α}{{$\alpha$}}1
|
||
{β}{{$\beta$}}1
|
||
{ρ}{{$\rho$}}1
|
||
{Σ}{{$\Sigma$}}1
|
||
{Λ}{{$\Lambda$}}1
|
||
{≤}{{$\leq$}}1
|
||
{≥}{{$\geq$}}1
|
||
{→}{{$\to$}}1
|
||
{±}{{$\pm$}}1
|
||
{°}{{$^\circ$}}1
|
||
{×}{{$\times$}}1
|
||
{✅}{{{$\checkmark$}}}1
|
||
{❌}{{$\times$}}1
|
||
{ε}{{$\varepsilon$}}1
|
||
{∈}{{$\in$}}1
|
||
}
|
||
|
||
% --- Callout boxes ------------------------------------------------------------
|
||
\usepackage[most]{tcolorbox}
|
||
|
||
\newtcolorbox{limitation}[1][]{%
|
||
colback=red!5!white,
|
||
colframe=red!55!black,
|
||
title=\textbf{Limitation},
|
||
fonttitle=\bfseries,
|
||
boxrule=0.6pt,
|
||
arc=2pt,
|
||
left=6pt, right=6pt, top=4pt, bottom=4pt,
|
||
#1
|
||
}
|
||
|
||
\newtcolorbox{derivation}[1][]{%
|
||
colback=blue!3!white,
|
||
colframe=blue!40!black,
|
||
title=\textbf{Derivation},
|
||
fonttitle=\bfseries,
|
||
boxrule=0.6pt,
|
||
arc=2pt,
|
||
left=6pt, right=6pt, top=4pt, bottom=4pt,
|
||
#1
|
||
}
|
||
|
||
\newtcolorbox{deadend}[1][]{%
|
||
colback=gray!8!white,
|
||
colframe=gray!50!black,
|
||
title=\textbf{Dead end},
|
||
fonttitle=\bfseries,
|
||
boxrule=0.5pt,
|
||
arc=2pt,
|
||
borderline west={2pt}{0pt}{gray!40},
|
||
left=6pt, right=6pt, top=4pt, bottom=4pt,
|
||
#1
|
||
}
|
||
|
||
\newtcolorbox{decision}[1][]{%
|
||
colback=green!3!white,
|
||
colframe=green!35!black,
|
||
title=\textbf{Decision},
|
||
fonttitle=\bfseries,
|
||
boxrule=0.6pt,
|
||
arc=2pt,
|
||
left=6pt, right=6pt, top=4pt, bottom=4pt,
|
||
#1
|
||
}
|
||
|
||
% TODO-for-A-pass marker: highlighted so we can find them for later deep-pass.
|
||
\newcommand{\apass}[1]{%
|
||
{\fboxsep=2pt\colorbox{orange!20}{\textbf{[A-pass]}}\,\textit{#1}}
|
||
}
|
||
|
||
% --- Session header ----------------------------------------------------------
|
||
% Usage: \session{2026-04-17}{afternoon, ~5 hr}{summary line}
|
||
\newcommand{\session}[3]{%
|
||
\noindent\rule{\linewidth}{0.8pt}
|
||
\vspace{2pt}
|
||
\noindent\textbf{\Large Session: #1} \hfill \textit{#2}\par
|
||
\vspace{2pt}
|
||
\noindent\emph{#3}\par
|
||
\vspace{4pt}
|
||
\noindent\rule{\linewidth}{0.4pt}
|
||
\vspace{6pt}
|
||
}
|
||
|
||
% --- Code macros --------------------------------------------------------------
|
||
\newcommand{\juliafile}[2][]{\lstinputlisting[language=Julia,caption={#2},#1]{#2}}
|
||
\newcommand{\matlabfile}[2][]{\lstinputlisting[language=Matlab,caption={#2},#1]{#2}}
|
||
\newcommand{\pyfile}[2][]{\lstinputlisting[language=Python,caption={#2},#1]{#2}}
|
||
|
||
% --- Cross-reference helpers --------------------------------------------------
|
||
\usepackage[colorlinks=true, linkcolor=blue!50!black, citecolor=blue!40!black,
|
||
urlcolor=teal!60!black]{hyperref}
|
||
\usepackage{bookmark}
|
||
\usepackage{cleveref}
|
||
|
||
% --- Headers & footers --------------------------------------------------------
|
||
\usepackage{fancyhdr}
|
||
\pagestyle{fancy}
|
||
\fancyhf{}
|
||
\fancyhead[L]{HAHACS lab journal}
|
||
\fancyhead[R]{\leftmark}
|
||
\fancyfoot[C]{\thepage}
|
||
\renewcommand{\headrulewidth}{0.3pt}
|
||
|
||
% --- A small quiet easter egg for anyone who greps the preamble ---------------
|
||
% "Looks ordinary on the surface but is something else underneath."
|
||
% — the name behind Split. Keep the journal honest; under every summary
|
||
% there's a derivation; under every derivation there's a doubt.
|