You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
\item This algorithm is implemented in \cite{notebook:code} as
117
-
\WriteCodeRef{alg:infer_zhegalkin_polynomial}
117
+
\begin{CodeRefDisplay}
118
+
\GetCodeRef{alg:infer_zhegalkin_polynomial}
119
+
\end{CodeRefDisplay}
118
120
\end{comments}
119
121
\begin{defproof}
120
122
We will prove correctness by induction. The base case \( n = 0 \) is vacuous, so suppose that \( n > 0 \) and that the algorithm is correct for less than \( n \) variables.
\item This algorithm is implemented in \cite{notebook:code} as
655
-
\WriteCodeRef{alg:type_derivation_to_proof_tree}
655
+
\begin{CodeRefDisplay}
656
+
\GetCodeRef{alg:type_derivation_to_proof_tree}
657
+
\end{CodeRefDisplay}
656
658
657
659
\item When restricted to arrow types, this algorithm works just as well for \hyperref[def:lambda_term]{untyped} or even \hyperref[rem:mixed_lambda_term]{mixed} \(\muplambda\)-terms.
\item The term \( q_k \)\enquote{carries} either \( -1 \), \( 0 \) or \( 1 \) to be used in the next step.
102
104
\item This algorithm is implemented in \cite{notebook:code} as
103
-
\WriteCodeRef{alg:addition_with_carrying}
105
+
\begin{CodeRefDisplay}
106
+
\GetCodeRef{alg:addition_with_carrying}
107
+
\end{CodeRefDisplay}
104
108
\end{comments}
105
109
\begin{defproof}
106
110
\SubProof{Proof that \( q_k \) is either \( -1 \), \( 0 \) or \( 1 \)} We will show by induction on \( k \) that \( q_k \) is either \( -1 \), \( 0 \) or \( 1 \). Note that, since \( b \geq 2 \), we have
\item This algorithm is implemented in \cite{notebook:code} as
426
-
\WriteCodeRef{alg:long_integer_division}
434
+
\begin{CodeRefDisplay}
435
+
\GetCodeRef{alg:long_integer_division}
436
+
\end{CodeRefDisplay}
427
437
\end{comments}
428
438
\begin{defproof}
429
439
The guard steps \fullref{alg:long_integer_division/n_guard} and \fullref{alg:long_integer_division/m_guard} allow us to assume that \( n \geq 0 \) and \( m \geq 0 \).
\item We implicitly associate with each propositional formula an \hyperref[con:abstract_syntax_tree]{abstract syntax tree} --- see \cref{def:fol_term_ast}. The grammar of first-order terms is unambiguous as shown via \cref{thm:fol_term_grammar/unambiguous}, which makes it possible to perform proofs via \fullref{thm:induction_on_abstract_syntax}.
134
134
135
135
\item First-order terms are implemented in \cite{notebook:code}, in the module
\item Within the metalanguage, we will denote abstract formulas via \(\varphi\), \(\psi\), \(\theta\) and other letters in accordance with \cref{rem:mathematical_logic_conventions/greek_alphabet}. This convention will later lead us to a formal definition of formula schemas in \cref{def:fol_formula_schema}.
268
274
269
275
\item First-order formulas are implemented in \cite{notebook:code}, in the module
\item The term \enquote{denotation} is inspired by Russell's theory of denotations discussed in \cref{con:denotation}. It is used inconsistently in the literature. See \cref{rem:model_theory_structure_terminology}.
546
558
547
559
\item This algorithm is implemented in \cite{notebook:code} as
\item The term \enquote{denotation} is inspired by Russell's theory of denotations discussed in \cref{con:denotation}. It is used inconsistently in the literature. See \cref{rem:model_theory_structure_terminology}.
615
629
616
630
\item This algorithm is implemented in \cite{notebook:code} as
\item Structures are implemented in \cite{notebook:code}, in the module
718
-
\WriteCodeRefText{logic.structure}
734
+
\begin{CodeRefDisplay}
735
+
\ManualCodeRef{logic.structure}
736
+
\end{CodeRefDisplay}
719
737
720
738
\item The definition is based on \bycite[def. 2.6.3]{Hinman2005Logic}, with small adjustments made for the intuitionistic treatment of formal equality.
\item This algorithm is implemented in \cite{notebook:code} as
958
-
\WriteCodeRef{alg:fol_formula_dualization}
982
+
\begin{CodeRefDisplay}
983
+
\GetCodeRef{alg:fol_formula_dualization}
984
+
\end{CodeRefDisplay}
959
985
\end{comments}
960
986
\begin{defproof}
961
987
We will use \fullref{thm:induction_on_abstract_syntax} on \(\varphi\) to show that \(\Bracks{\oline{M}(\varphi)}_\mscrX^v = \oline{\Bracks{\varphi}_\mscrX^v} \) for every variable assignment \( v \) in every structure \(\mscrX = (X, I) \).
\item This algorithm is implemented in \cite{notebook:code} as
20
-
\WriteCodeRef{alg:fol_formula_substitution}
20
+
\begin{CodeRefDisplay}
21
+
\GetCodeRef{alg:fol_formula_substitution}
22
+
\end{CodeRefDisplay}
21
23
22
24
\item This substitution is defined as to have the properties listed in \cref{rem:variable_binding_properties}; we elaborate on this in \fullref{thm:alg:fol_formula_substitution}.
Fix an \hyperref[def:atomic_fol_instantiation]{atomic schema instantiation} \(\BbbI\) and a list \( (P_1, \ldots, P_n) \) of proof trees such that, for \( i = 1, \ldots, n \), the conclusion of \( P_k \) is \(\Phi_k[\BbbI] \). As in the propositional case, for a suitable choice \( d \) of dischargeable assumptions, we have a unique rule application tree \( P_d \).
531
541
532
542
Describing the eigenvariables of \( P_d \) requires additional coherence conditions. They are enforced programmatically in \cite{notebook:code}, in the function
Gentzen presents only two rules featuring eigenvariables, in which the variables must satisfy slightly differing constraints. We formalize Gentzen's rules in \cref{def:fol_natural_deduction} and adapt them for \hyperref[def:higher_order_logic]{higher-order logic} in \cref{def:hol_natural_deduction}.
599
611
600
612
\item Natural deduction proof trees are implemented in \cite{notebook:code}, in the module
\item We will use this algorithm to show compatibility of propositional and first-order derivation relations in \cref{thm:fol_propositional_formula_translation_entailment}.
683
697
684
698
\item This algorithm is implemented in \cite{notebook:code} as
0 commit comments