Skip to content

Instantly share code, notes, and snippets.

@lakesare
Created July 11, 2025 22:38
Show Gist options
  • Save lakesare/65c96aee46e2eaf96a55d96751084e6b to your computer and use it in GitHub Desktop.
Save lakesare/65c96aee46e2eaf96a55d96751084e6b to your computer and use it in GitHub Desktop.
Paperproof in html form
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Paperproof Snapshot</title>
<style>
@import url('https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,100..700;1,100..700&display=swap');
</style>
<style>
.proof-tree.-isSingleTacticModeON{
#box-1{ width: 100vw !important; }
/* This is so that unfolded theorems don't take up excessive space for no reason */
.tactic.-hypothesis-tactic{
display: block;
}
/* Makes yellow hypothesis color correct */
header div.row-1 > div{
flex-wrap: wrap;
}
.hypothesis.-highlighted, .hypothesis.data.-highlighted{
border-color: #72787C;
}
.hypothesis-table .hypothesis.-highlighted{
border-color: rgb(152 214 179) !important;
}
.single-tactic-hyp-row{
padding-top: 1px;
display: block !important;
.hypothesis{
display: block;
width: fit-content;
margin-top: 2px;
}
}
.fancy-substring-theorem{
text-decoration: underline;
text-decoration-color: #72787c;
cursor: pointer;
text-underline-offset: 2px;
&:hover{
opacity: 0.8;
}
}
.fancy-substring-hypothesis{
color: #d0005b;
}
}
.tactic{
/* font-family: var(--vscode-editor-font-family); */
}
.proof-tree.-we-are-on-ellipsis-tactic{
.hypothesis.-highlighted, .goal.-highlighted{ border-color: #72787C; }
}
/* This is for folding/unfolding `have`s */
.tactic.-hypothesis-tactic{
display: flex;
justify-content: space-between;
/* cursor: pointer; */
transition: background-color 0.5s ease;
&.-highlight{
background-color: rgb(255, 146, 250) !important;
}
&:hover button{
background: none;
opacity: 0.6;
cursor: pointer; /* We do need { cursor: pointer } here too! */
}
.text{ cursor: default; }
button{
background: transparent;
border: none;
color: #6c8a97;
padding: 0;
padding-left: 10px;
}
.show-boxes{
margin-top: -6px;
}
.hide-boxes{
margin-top: -2px;
}
}
/*______________________ BODY: prettiness ______________________*/
body *{
box-sizing: border-box;
}
.hypothesis span.name{
color: #d0005b;
}
/*
Hides scrollbars - we can still scroll, but we don't want to show scrollbars.
Notice we need both of these rules - one for ubuntu, another for osx.
*/
html{ scrollbar-width: none; }
body::-webkit-scrollbar{ display: none; }
body{
background: white;
color: #3a505a;
font-weight: 500;
/* Make tldraw bg dark for dark vscode themes */
&.vscode-dark{
background-color: var(--vscode-editor-background);
}
.proof-tree{
border-radius: 3px;
background: white;
}
/*
Same font-family as InfoView's.
Most importantly, makes symbols such as "∀ x ∈ A ∩ B, x ∈ A" render nicely.
*/
.hypothesis, .goal{
font-family: var(--vscode-editor-font-family);
}
}
/*______________________ BODY: widths for zooming ______________________*/
body{
padding: 70vh 70vw;
width: fit-content;
.proof-tree{
width: max-content;
transform-origin: 0% 0% 0px;
}
}
/*______________________ ARROWS ______________________*/
.proof-tree{
position: relative;
}
.perfect-arrow{
position: absolute;
top: 0; left: 0;
z-index: 0;
pointer-events: none;
stroke-width: 2px;
stroke: #a0ceb0;
fill: #a0ceb0;
}
.tactic{
.perfect-arrow{
display: none;
}
&:hover .perfect-arrow,
&.-success .perfect-arrow{
display: block;
}
}
.proof-tree.-isSingleTacticModeON{
.tactic .perfect-arrow{ z-index: 5; display: block; }
}
/*______________________ PROOF-TREE: colors ______________________*/
/* This would be really easy to achieve with opacities, however various nodes goalUsernames must *cover* tactic borders to make them look good, which means they must be solid-color. */
.box{
--color: color-mix(in srgb, rgba(132, 147, 171), white calc(90% - var(--level) * 7%));
background: var(--color);
/* This is necessary because otherwise the border-right will get swallowed up a bit (becomes too thin) in some tactic nodes */
.tactic{ background-color: var(--color); }
}
.box > .goal-username{
background: color-mix(in srgb, rgba(132, 147, 171), white calc(80% - var(--level) * 7%));
}
/* We can also adjust node colors in the future */
/* .hypothesis{
background: color-mix(in srgb, #a4dabc, rgba(132, 147, 171) calc(var(--level) * 7%)) !important;
border-color: color-mix(in srgb, rgb(124 211 158), rgba(132, 147, 171) calc(var(--level) * 7%)) !important;
} */
.box { --level: 0;
& .box{ --level: 1;
& .box{ --level: 2;
& .box{ --level: 3;
& .box{ --level: 4;
& .box{ --level: 5;
& .box{ --level: 6;
& .box{ --level: 7;
& .box{ --level: 8;
}}}}}}}}}
/*______________________ PROOF-TREE: prettiness ______________________*/
.box{
font-size: 12px;
border-radius: 3px;
flex-grow: 1;
.child-boxes, .byBoxes{
display: flex;
justify-content: space-between;
align-items: flex-end;
gap: 10px;
}
table.hypothesis-table{
border-spacing: 0;
td{
padding: 0;
padding-right: 2px;
vertical-align: top;
}
td:last-child {
padding-right: 0;
}
}
.goal-username{
width: 100%;
text-align: center;
color: #9c9797;
padding: 0 10px;
padding-bottom: 1px;
}
}
.hypothesis, .goal, .tactic{
flex-wrap: wrap;
padding: 5px 12px;
border-radius: 3px;
/* exactly 3 lines */
line-height: 1.3em;
/* max-height: calc(1.3em * 3 + 12px); */
/* overflow-y: auto; */
word-break: break-word;
}
/* We need this to make sure <goal>s and <hyp>s stay on top of <tactic>s */
.goal, .hypothesis{ position: relative; }
/* We need this to make sure <hyp>s stay on top of <tactic>s and arrows */
.hypothesis{ z-index: 1; }
/* We need this to make sure <hyp>s stay on top of <tactic>s, but below arrows */
.goal{ z-index: 0; }
.tactic{
margin-top: -2px; margin-bottom: -2px;
padding-top: 7px; padding-bottom: 7px;
color: #72787c;
background-image: url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' stroke='%23c7ccce' stroke-width='3' stroke-dasharray='4%2c 6' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e");
&.-position-matches{
font-weight: bold;
color: #363d59;
}
&.-success{
/* center text */
display: flex;
justify-content: center;
align-items: center;
text-align: center;
gap: 7px;
background: rgb(0 213 255 / 12%);
background-image: url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' stroke='%239ed6e1' stroke-width='3' stroke-dasharray='4%2c 5' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e");
}
&.-with-theorem{
background-color: transparent !important;
}
&.-sorried{
text-align: center;
background: #f2ded94f;
background-image: url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' stroke='%23f0cac196' stroke-width='3' stroke-dasharray='4%2c 6' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e");
}
&.-ellipsis{
text-align: center;
font-weight: bold;
color: #363d59;
letter-spacing: 2px;
background: rgba(82, 95, 98, 0.049);
background-image: url("data:image/svg+xml,%3csvg width='100%25' height='100%25' xmlns='http://www.w3.org/2000/svg'%3e%3crect width='100%25' height='100%25' fill='none' stroke='%23c7ccce' stroke-width='3' stroke-dasharray='4%2c 6' stroke-dashoffset='0' stroke-linecap='square'/%3e%3c/svg%3e");
}
&.-sorried, &.-success, &.-ellipsis{
/* increase padding by 1px, looks better this way */
padding-top: 8px;
padding-bottom: 8px;
}
}
.hypothesis{
background: #a4dabc;
border: 2px solid rgb(152 214 179);
.name{ color: #d0005b; }
&.-hidden{ cursor: pointer; }
}
.-isGreenHypothesesOFF{
.hypothesis.data{
background: #f9e9b5;
border: 2px solid rgb(239, 227, 152);
}
}
.goal{
background: rgb(249, 195, 195);
border: 2px solid rgb(246, 185, 185);
color: #5a5656;
}
.proof-tree.-isHiddenGoalNamesON{
.goal-username{
display: none;
}
}
/*______________________ PROOF-TREE: paddings ______________________*/
/* This is the easiest way to acommodate for our nice negative-margin <tactic>s */
.box-insides{ padding-top: 2px; }
/* .data-hypotheses{ margin-top: -2px; } */
.box-insides{
padding: 10px;
padding-top: 12px;
padding-bottom: 0;
}
table.hypothesis-table{
margin-bottom: 12px;
}
table.hypothesis-table + .goals{
margin-top: 30px;
}
.proof-tree.-isCompactModeON{
#box-1 .child-boxes {
header, .box-insides{
padding-left: 0px;
padding-right: 0px;
}
}
}
/* This might be our "symmetrical mode" */
/* .proof-tree.-isSymmetricalModeON{
.box-insides{
padding-left: 1px;
padding-right: 1px;
}
} */
/*______________________ PROOF-TREE: widths ______________________*/
.box{
width: max-content;
}
header, footer{
background: rgb(230, 233, 238);
.title{
text-transform: uppercase;
font-size: 10px;
padding: 4px 10px;
width: 100%;
text-align: center;
color: rgb(156, 151, 151);
}
}
/* All of this header logic is just to make the paddings look pretty */
header{
padding-left: 10px;
padding-right: 10px;
border-top-left-radius: 3px;
border-top-right-radius: 3px;
width: 0;
min-width: 100%;
--hypNodeHeight: 30px;
--bigPaddingBottom: 5px;
&.-hoistAndPaddingBottomSmall, &.-hoistAndPaddingBottomBig{
position: relative;
div.row-1{
padding-bottom: 2px;
}
div.row-2{
height: calc(var(--hypNodeHeight) + var(--bigPaddingBottom));
position: absolute;
top: 100%; left: 0;
width: 100%;
background: rgb(230, 233, 238);
}
&+.box-insides{
padding-top: 0;
/*
This makes sure header hypotheses not exceed 30px in height [in most cases!]
TODO remove this when vscode switches to Chrome 125, and we can switch to anchor tags,
see a related TODO in <Header/>
*/
.hypothesis-table:first-child tr:nth-child(2) div.hypothesis {
max-width: 300px !important;
}
}
}
&.-hoistAndPaddingBottomBig +.box-insides{
> .hypothesis-table:first-child tr:nth-child(3) td{
padding-top: 20px;
}
}
&.-hoistAndPaddingBottomSmall{
div.row-2{
height: var(--hypNodeHeight);
}
}
&.-row2Absent{
div.row-1{
padding-bottom: 5px;
}
}
div.row-1 > div{
width: 100%;
display: flex;
flex-wrap: wrap-reverse;
column-gap: 2px;
row-gap: 2px;
}
}
footer{
border-bottom-left-radius: 3px;
border-bottom-right-radius: 3px;
}
.hypothesis-table{
.hypothesis{
width: fit-content;
max-width: 200px;
min-width: 100%;
}
}
/* tactics will just follow hyp widths */
.proof-tree.-isCompactTacticsON .tactic.-hypothesis-tactic{
width: min-content;
max-width: 100%;
min-width: 100%;
word-break: break-all;
}
/* tactics will have self-respect */
.proof-tree.-isCompactTacticsOFF .tactic.-hypothesis-tactic,
.proof-tree.-isCompactTacticsON .tactic.-hypothesis-tactic.-with-self-respect{
width: 100% ;
min-width: min-content ;
}
.goals{
.goal{
max-width: 200px;
min-width: 100%;
}
.tactic{
max-width: 200px;
min-width: 100%;
}
}
#box-1 > .box-insides > .goals{
min-width: 200px;
}
/*______________________ DEVELOPMENT ______________________*/
.-hint pre{
display: none;
position: fixed;
bottom: 0; right: 0;
margin: 0;
padding: 10px;
background: rgba(255, 255, 255, 0.95);
z-index: 1000;
border-radius: 3px;
}
.-hint:hover pre{
display: block;
}
/* Snapshot-specific overrides */
.proof-tree {
transform: none !important;
}
.perfect-arrow {
display: none !important;
}
/* Disable interactive elements in snapshot */
button { pointer-events: none; }
.MuiMenu-root { display: none !important; }
body{
font-family: monospace;
--vscode-editor-font-family: monospace;
padding: 0 !important;
}
*{
font-family: monospace !important;
}
</style>
</head>
<body>
<div class="
proof-tree
-isCompactTacticsOFF
-isHiddenGoalNamesON
-isGreenHypothesesOFF
" style="transform: scale(0.772376);"><section class="box " id="box-1"><header class="
-hoistAndPaddingBottomSmall
"><div class="title">hypotheses</div><div class="row-1"><div><div id="hypothesis-_uniq.27069" class="
hypothesis
-hint
data
"><span class="name">inst✝¹</span>: <span class="text">DecidableEq α</span></div><div id="hypothesis-_uniq.28459" class="
hypothesis
-hint
data
"><span class="name">M</span>: <span class="text">Matroid α</span></div></div></div><div class="row-2"></div></header><div class="box-insides"><table class="hypothesis-table"><tbody><tr><td colspan="6"></td></tr><tr><td colspan="1"><div id="hypothesis-_uniq.28460" class="
hypothesis
-hint
proof
"><span class="name">inst✝</span>: <span class="text">M.RankFinite</span></div></td><td colspan="5"><div id="hypothesis-_uniq.28461" class="
hypothesis
-hint
proof
"><span class="name">hM</span>: <span class="text">M.IsRegular</span></div></td></tr><tr><td></td><td colspan="5"><div class="
tactic -hint
-hypothesis-tactic
" id="tactic-2-0"><div class="text">obtain ⟨X, Y, A, hA_TU, hA_eq⟩ := <span class="fancy-substring-hypothesis">hM</span></div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M535.7733641316293,80.60155732876134 Q535.7733641316293,80.60155732876134 535.7733641316293,80.60155732876134" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(535.7733641316293,80.60155732876134) rotate(-90)"></polygon></svg></div></td></tr><tr><td></td><td colspan="1"><div id="hypothesis-_uniq.28483" class="
hypothesis
-hint
data
"><span class="name">X</span>: <span class="text">Set α</span></div></td><td colspan="1"><div id="hypothesis-_uniq.28501" class="
hypothesis
-hint
data
"><span class="name">Y</span>: <span class="text">Set α</span></div></td><td colspan="1"><div id="hypothesis-_uniq.28519" class="
hypothesis
-hint
data
"><span class="name">A</span>: <span class="text">Matrix ↑X ↑Y ℚ</span></div></td><td colspan="1"><div id="hypothesis-_uniq.28541" class="
hypothesis
-hint
proof
"><span class="name">hA_TU</span>: <span class="text">A.IsTotallyUnimodular</span></div></td><td colspan="1"><div id="hypothesis-_uniq.28542" class="
hypothesis
-hint
proof
"><span class="name">hA_eq</span>: <span class="text">A.toMatroid = M</span></div></td></tr></tbody></table><table class="hypothesis-table"><tbody><tr><td colspan="2"><div class="
tactic -hint
-hypothesis-tactic
" id="tactic-3-0"><div class="text">obtain ⟨⟨G, hG_base⟩⟩ := (inferInstance : Nonempty {B // <span class="fancy-substring-hypothesis">M</span>.IsBase B})</div></div></td></tr><tr><td colspan="1"><div id="hypothesis-_uniq.28633" class="
hypothesis
-hint
data
"><span class="name">G</span>: <span class="text">Set α</span></div></td><td colspan="1"><div id="hypothesis-_uniq.28634" class="
hypothesis
-hint
proof
"><span class="name">hG_base</span>: <span class="text">M.IsBase G</span></div></td></tr></tbody></table><table class="hypothesis-table"><tbody><tr><td colspan="1"><div class="child-boxes"><section class="box " id="box-2"><div class="box-insides"><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
-success
" id="tactic-6"><div class="text"><span>🎉</span> <span>exact <span class="fancy-substring-hypothesis">hG_base</span></span> <span>🎉</span></div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M276.3124409252363,218.60930494172771 Q254.56097578465446,228.28442519333612 232.80951064407265,237.95954544494452" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(232.80951064407265,237.95954544494452) rotate(156.02035098058482)"></polygon></svg></div><div class="goal -hint "><div class="text">M.IsBase G</div></div></div><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
" id="tactic-5"><div class="text">rw [<span class="fancy-substring-hypothesis">hA_eq</span>]</div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M801.2106401272259,135.80464847168832 Q517.2047136395397,216.02204097007206 233.1987871518536,296.2394334684558" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(233.1987871518536,296.2394334684558) rotate(164.2276823531978)"></polygon></svg></div><div class="goal -hint "><div class="text">A.toMatroid.IsBase G</div></div></div></div><div class="goal-username">[anonymous]</div></section></div><div class="
tactic -hint
-hypothesis-tactic
-with-self-respect
" id="tactic-4-0"><div class="text">have hAG_base : <span class="fancy-substring-hypothesis">A</span>.toMatroid.IsBase <span class="fancy-substring-hypothesis">G</span> := by rw [<span class="fancy-substring-hypothesis">hA_eq</span>]; exact <span class="fancy-substring-hypothesis">hG_base</span></div><button type="button" class="hide-boxes">▬</button></div></td></tr><tr><td colspan="1"><div id="hypothesis-_uniq.28657" class="
hypothesis
-hint
proof
"><span class="name">hAG_base</span>: <span class="text">A.toMatroid.IsBase G</span></div></td></tr></tbody></table><table class="hypothesis-table"><tbody><tr><td colspan="1"><div class="child-boxes"><section class="box " id="box-3"><div class="box-insides"><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
-success
" id="tactic-8"><div class="text"><span>🎉</span> <span>exact (IsBase.finite <span class="fancy-substring-hypothesis">hG_base</span>).fintype</span> <span>🎉</span></div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M92.4999958442017,80.60155732876134 Q148.26825369447894,252.9052241394609 204.03651154475617,425.2088909501605" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(204.03651154475617,425.2088909501605) rotate(72.06517093481133)"></polygon></svg><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M276.3124409252363,218.60930494172771 Q242.64567421979257,321.91160457413105 208.97890751434883,425.2139042065343" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(208.97890751434883,425.2139042065343) rotate(108.05106351305334)"></polygon></svg></div><div class="goal -hint "><div class="text">Fintype ↑G</div></div></div></div><div class="goal-username">[anonymous]</div></section></div><div class="
tactic -hint
-hypothesis-tactic
-with-self-respect
" id="tactic-7-0"><div class="text">have wow : Fintype <span class="fancy-substring-hypothesis">G</span> := by exact (IsBase.finite <span class="fancy-substring-hypothesis">hG_base</span>).fintype</div><button type="button" class="hide-boxes">▬</button></div></td></tr><tr><td colspan="1"><div id="hypothesis-_uniq.28856" class="
hypothesis
-hint
data
"><span class="name">wow</span>: <span class="text">Fintype ↑G</span></div></td></tr></tbody></table><table class="hypothesis-table"><tbody><tr><td colspan="4"><div class="
tactic -hint
-hypothesis-tactic
" id="tactic-9-0"><div class="text">obtain ⟨S, _, hS_eq, hS_TU⟩ := <span class="fancy-substring-hypothesis">A</span>.exists_standardRepr_isBase_isTotallyUnimodular <span class="fancy-substring-hypothesis">hAG_base</span> <span class="fancy-substring-hypothesis">hA_TU</span></div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M225.4999958442017,410.21859275388545 Q290.0499031074969,480.7712758057576 354.59981037079206,551.3239588576298" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(354.59981037079206,551.3239588576298) rotate(47.544049385428075)"></polygon></svg><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M605.7107502505864,150.80464847168832 Q484.9248494085589,350.5924402757411 364.1389485665313,550.3802320797939" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(364.1389485665313,550.3802320797939) rotate(121.15594015748974)"></polygon></svg></div></td></tr><tr><td colspan="1"><div id="hypothesis-_uniq.29069" class="
hypothesis
-hint
data
"><span class="name">S</span>: <span class="text">StandardRepr α ℚ</span></div></td><td colspan="1"><div id="hypothesis-_uniq.29087" class="
hypothesis
-hint
proof
"><span class="name">left✝</span>: <span class="text">S.X = G</span></div></td><td colspan="1"><div id="hypothesis-_uniq.29105" class="
hypothesis
-hint
proof
"><span class="name">hS_eq</span>: <span class="text">S.toMatroid = A.toMatroid</span></div></td><td colspan="1"><div id="hypothesis-_uniq.29106" class="
hypothesis
-hint
proof
"><span class="name">hS_TU</span>: <span class="text">S.B.IsTotallyUnimodular</span></div></td></tr></tbody></table><table class="hypothesis-table"><tbody><tr><td colspan="1"><div class="
tactic -hint
-hypothesis-tactic
-with-self-respect
" id="tactic-10-0"><div class="text">have h_dual_eq : <span class="fancy-substring-hypothesis">S</span>.toMatroid✶ = <span class="fancy-substring-hypothesis">S</span>✶.toMatroid := StandardRepr.toMatroid_dual_eq <span class="fancy-substring-hypothesis">S</span></div></div></td></tr><tr><td colspan="1"><div id="hypothesis-_uniq.31650" class="
hypothesis
-hint
proof
"><span class="name">h_dual_eq</span>: <span class="text">S.toMatroid✶ = S✶.toMatroid</span></div></td></tr></tbody></table><table class="hypothesis-table"><tbody><tr><td colspan="1"><div class="child-boxes"><section class="box " id="box-4"><div class="box-insides"><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
-success
" id="tactic-14"><div class="text"><span>🎉</span> <span>rw [rfl]</span> <span>🎉</span></div></div><div class="goal -hint "><div class="text">M = M</div></div></div><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
" id="tactic-13"><div class="text">rw [<span class="fancy-substring-hypothesis">hA_eq</span>]</div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M801.2106401272259,135.80464847168832 Q497.86886646151726,453.22908745678853 194.52709279580858,770.6535264418887" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(194.52709279580858,770.6535264418887) rotate(133.70041427340104)"></polygon></svg></div><div class="goal -hint "><div class="text">A.toMatroid = M</div></div></div><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
" id="tactic-12"><div class="text">rw [<span class="fancy-substring-hypothesis">hS_eq</span>]</div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M408.42957613250786,628.8278963225165 Q301.6522490524301,727.5190722568726 194.87492197235235,826.2102481912287" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(194.87492197235235,826.2102481912287) rotate(137.25369515042465)"></polygon></svg></div><div class="goal -hint "><div class="text">S.toMatroid = M</div></div></div></div><div class="goal-username">[anonymous]</div></section></div><div class="
tactic -hint
-hypothesis-tactic
-with-self-respect
" id="tactic-11-0"><div class="text">have h_M_eq_S : <span class="fancy-substring-hypothesis">S</span>.toMatroid = <span class="fancy-substring-hypothesis">M</span> := by rw [<span class="fancy-substring-hypothesis">hS_eq</span>, <span class="fancy-substring-hypothesis">hA_eq</span>]</div><button type="button" class="hide-boxes">▬</button></div></td></tr><tr><td colspan="1"><div id="hypothesis-_uniq.31668" class="
hypothesis
-hint
proof
"><span class="name">h_M_eq_S</span>: <span class="text">S.toMatroid = M</span></div></td></tr></tbody></table><table class="hypothesis-table"><tbody><tr><td colspan="1"><div class="child-boxes"><section class="box " id="box-5"><div class="box-insides"><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
-success
" id="tactic-18"><div class="text"><span>🎉</span> <span>rw [rfl]</span> <span>🎉</span></div></div><div class="goal -hint "><div class="text">S✶.toMatroid = S✶.toMatroid</div></div></div><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
" id="tactic-17"><div class="text">rw [<span class="fancy-substring-hypothesis">h_dual_eq</span>]</div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M253.9999958442017,696.6325923038537 Q240.34164993812504,855.9557152800337 226.6833040320484,1015.2788382562136" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(226.6833040320484,1015.2788382562136) rotate(94.89983437244253)"></polygon></svg></div><div class="goal -hint "><div class="text">S.toMatroid✶ = S✶.toMatroid</div></div></div><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
" id="tactic-16"><div class="text">rw [←<span class="fancy-substring-hypothesis">h_M_eq_S</span>]</div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M188.9999958442017,943.4449712589384 Q206.4427457156682,1007.0911033591865 223.88549558713467,1070.7372354594347" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(223.88549558713467,1070.7372354594347) rotate(74.67392350534193)"></polygon></svg></div><div class="goal -hint "><div class="text">M✶ = S✶.toMatroid</div></div></div></div><div class="goal-username">[anonymous]</div></section></div><div class="
tactic -hint
-hypothesis-tactic
-with-self-respect
" id="tactic-15-0"><div class="text">have h_M_dual : <span class="fancy-substring-hypothesis">M</span>✶ = <span class="fancy-substring-hypothesis">S</span>✶.toMatroid := by rw [←<span class="fancy-substring-hypothesis">h_M_eq_S</span>, <span class="fancy-substring-hypothesis">h_dual_eq</span>]</div><button type="button" class="hide-boxes">▬</button></div></td></tr><tr><td colspan="1"><div id="hypothesis-_uniq.34201" class="
hypothesis
-hint
proof
"><span class="name">h_M_dual</span>: <span class="text">M✶ = S✶.toMatroid</span></div></td></tr></tbody></table><div class="child-boxes"><section class="box " id="box-6"><div class="box-insides"><table class="hypothesis-table"><tbody><tr><td colspan="1"><div class="child-boxes"><section class="box " id="box-8"><div class="box-insides"><table class="hypothesis-table"><tbody><tr><td colspan="1"><div class="child-boxes"><section class="box " id="box-9"><div class="box-insides"><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
-success
" id="tactic-24"><div class="text"><span>🎉</span> <span>exact Matrix.IsTotallyUnimodular.transpose <span class="fancy-substring-hypothesis">hS_TU</span></span> <span>🎉</span></div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M610.4295055204452,628.8278963225165 Q403.4823617020561,929.5482633395704 196.535217883667,1230.2686303566243" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(196.535217883667,1230.2686303566243) rotate(124.53463499756687)"></polygon></svg></div><div class="goal -hint "><div class="text">S.Bᵀ.IsTotallyUnimodular</div></div></div></div><div class="goal-username">[anonymous]</div></section></div><div class="
tactic -hint
-hypothesis-tactic
-with-self-respect
" id="tactic-23-0"><div class="text">have hB_transpose : <span class="fancy-substring-hypothesis">S</span>.Bᵀ.IsTotallyUnimodular := by</div><button type="button" class="hide-boxes">▬</button></div></td></tr><tr><td colspan="1"><div id="hypothesis-_uniq.41374" class="
hypothesis
-hint
proof
"><span class="name">hB_transpose</span>: <span class="text">S.Bᵀ.IsTotallyUnimodular</span></div></td></tr></tbody></table><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
-success
" id="tactic-26"><div class="text"><span>🎉</span> <span>exact Matrix.IsTotallyUnimodular.neg <span class="fancy-substring-hypothesis">hB_transpose</span></span> <span>🎉</span></div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M191.99999000206122,1366.265088455542 Q191.99999000206122,1376.5659006925143 191.99999000206122,1386.8667129294865" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(191.99999000206122,1386.8667129294865) rotate(90)"></polygon></svg></div><div class="goal -hint "><div class="text">(StandardRepr.mk S.Y S.X ⋯ (-S.Bᵀ) S.decmemY S.decmemX).B.IsTotallyUnimodular</div></div></div><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
" id="tactic-25"><div class="text">rw [StandardRepr.dual]</div></div><div class="goal -hint "><div class="text">S✶.B.IsTotallyUnimodular</div></div></div></div><div class="goal-username">[anonymous]</div></section></div><div class="
tactic -hint
-hypothesis-tactic
-with-self-respect
" id="tactic-22-0"><div class="text">have hS_B_TU : <span class="fancy-substring-hypothesis">S</span>✶.B.IsTotallyUnimodular := by</div><button type="button" class="hide-boxes">▬</button></div></td></tr><tr><td colspan="1"><div id="hypothesis-_uniq.41339" class="
hypothesis
-hint
proof
"><span class="name">hS_B_TU</span>: <span class="text">S✶.B.IsTotallyUnimodular</span></div></td></tr></tbody></table><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
-success
" id="tactic-28"><div class="text"><span>🎉</span> <span>exact <span class="fancy-substring-hypothesis">hS_B_TU</span></span> <span>🎉</span></div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M191.9999916884034,1610.6791316360977 Q224.52907369979982,1623.511951596196 257.05815571119626,1636.3447715562943" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(257.05815571119626,1636.3447715562943) rotate(21.529382318239122)"></polygon></svg></div><div class="goal -hint "><div class="text">S✶.B.IsTotallyUnimodular</div></div></div><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
" id="tactic-27"><div class="text">rw [StandardRepr.toFull_isTotallyUnimodular_iff]</div></div><div class="goal -hint "><div class="text">S✶.toFull.IsTotallyUnimodular</div></div></div></div><div class="goal-username">h.left</div></section><section class="box " id="box-7"><div class="box-insides"><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
-success
" id="tactic-29"><div class="text"><span>🎉</span> <span>rfl</span> <span>🎉</span></div></div><div class="goal -hint "><div class="text">S✶.toFull.toMatroid = S✶.toMatroid</div></div></div></div><div class="goal-username">h.right</div></section></div><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
" id="tactic-21"><div class="text">constructor</div></div><div class="goal -hint "><div class="text">S✶.toFull.IsTotallyUnimodular ∧ S✶.toFull.toMatroid = S✶.toMatroid</div></div></div><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
" id="tactic-20"><div class="text">use <span class="fancy-substring-hypothesis">S</span>✶.X, <span class="fancy-substring-hypothesis">S</span>✶.X ∪ <span class="fancy-substring-hypothesis">S</span>✶.Y, <span class="fancy-substring-hypothesis">S</span>✶.toFull</div></div><div class="goal -hint "><div class="text">S✶.toMatroid.IsRegular</div></div></div><div class="goals"><div class="byBoxes"></div><div class="
tactic -hint
" id="tactic-19"><div class="text">rw [<span class="fancy-substring-hypothesis">h_M_dual</span>]</div><svg class="perfect-arrow" viewBox="0 0 10000 10000" style="width: 10000px; height: 10000px;"><path d="M225.9999958442017,1190.257350214023 Q337.9721199096966,1522.384800439575 449.94424397519145,1854.5122506651269" fill="none"></path><polygon points="0,-3 6,0, 0,3" transform="translate(449.94424397519145,1854.5122506651269) rotate(71.3691856871637)"></polygon></svg></div><div class="goal -hint "><div class="text">M✶.IsRegular</div></div></div></div><footer><div class="title">theorem</div></footer></section></div>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment