Flag algebra
Flag algebras are an important computational tool in the field of graph theory which have a wide range of applications in homomorphism density and related topics. Roughly, they formalize the notion of adding and multiplying homomorphism densities and set up a framework to solve graph homomorphism inequalities with computers by reducing them to semidefinite programming problems. Originally introduced by Alexander Razborov in a 2007 paper,[1] the method has since come to solve numerous difficult, previously unresolved graph theoretic questions. These include the [math]\displaystyle{ D_{2,3} }[/math] question regarding the region of feasible edge density, triangle density pairs and the maximum number of pentagons in triangle free graphs.[2]
Motivation
The motivation of the theory of flag algebras is credited to John Adrian Bondy and his work on the Caccetta-Haggkvist conjecture, where he illustrated his main ideas via a graph homomorphism flavored proof to Mantel's Theorem.[3] This proof is an adaptation on the traditional proof of Mantel via double counting, except phrased in terms of graph homomorphism densities and shows how much information can be encoded with just density relationships.
Theorem (Mantel): The edge density in a triangle-free graph [math]\displaystyle{ G }[/math] is at most [math]\displaystyle{ \frac{1}{2} }[/math]. In other words, [math]\displaystyle{ \mathrm{ex}(K_2,\{K_3\})\le\frac{1}{2}. }[/math]
As the graph is triangle-free, among 3 vertices in [math]\displaystyle{ G }[/math], they can either form an independent set, a single induced edge [math]\displaystyle{ \tilde{P_3} }[/math], or a path of length 2 [math]\displaystyle{ P_3 }[/math]. Denoting [math]\displaystyle{ d(H,G) }[/math] as the induced density of a subgraph [math]\displaystyle{ H }[/math] in [math]\displaystyle{ G }[/math], double counting gives:
[math]\displaystyle{ \binom{n}{3}\left(d(\tilde{P_3},G)+2d(P_3,G)\right)=\binom{n}{2}(n-2)d(K_2,G)\implies d(\tilde{P_3},G)+2d(P_3,G)=3d(K_2,G). }[/math]
Intuitively, [math]\displaystyle{ d(P_3,G)\approx 3d(K_2,G)^2 }[/math] since a [math]\displaystyle{ P_3 }[/math] just consists of two [math]\displaystyle{ K_2 }[/math]s connected together, and there are 3 ways to label the common vertex among a set of 3 points. In fact, this can be rigorously proven by double counting the number of induced [math]\displaystyle{ P_3 }[/math]s. Letting [math]\displaystyle{ |G| }[/math] denote the number of vertices of [math]\displaystyle{ G }[/math], we have:
[math]\displaystyle{ d(P_3,G)=\binom{|G|}{3}^{-1}\sum_{v\in V(G)}\binom{d(v)}{2}=\binom{|G|}{3}^{-1}\binom{|G|-1}{2}\sum_{v\in V(G)}d(P_3^b,G^v)=\frac{3}{|G|}\sum_{v\in V(G)}d(P_3^b,G^v), }[/math]
where [math]\displaystyle{ P_3^b }[/math] is the path of length 2 with its middle vertex labeled, and [math]\displaystyle{ d(P_3^b,G^v) }[/math] represents the density of [math]\displaystyle{ P_3^b }[/math]s subject to the constraint that the labeled vertex is used, and that [math]\displaystyle{ P_3^b }[/math] is counted as a proper induced subgraph only when its labeled vertex coincides with [math]\displaystyle{ v }[/math]. Now, note that [math]\displaystyle{ d(P_3^b,G^v)\approx d(K_2^b,G^v)^2 }[/math] since the probability of choosing two [math]\displaystyle{ K_2^b }[/math]s where the unlabeled vertices coincide is small (to be rigorous, a limit as [math]\displaystyle{ |G|\to\infty }[/math] should be taken, so [math]\displaystyle{ d(H,G) }[/math] acts as a limit function on a sequence of larger and larger graphs [math]\displaystyle{ G }[/math]. This idea will be important for the actual definition of flag algebras.) To finish, apply the Cauchy–Schwarz inequality to get
[math]\displaystyle{ \sum_{v\in V(G)}d(P_3^b,G^v)\approx\sum_{v\in V(G)}d(K_2^b,G^v)^2\ge\frac{1}{|G|}\left(\sum_{v\in V(G)}d(K_2^b,G^v)\right)^2=\frac{1}{|G|}\left(\frac{1}{|G|-1}\binom{|G|}{2}2d(K_2,G)\right)^2=|G|d(K_2,G)^2. }[/math]
Plugging this back into our original relation proves what was hypothesized intuitively. Finally, note that [math]\displaystyle{ d(\tilde{P_3},G)\ge 0 }[/math] so
[math]\displaystyle{ 6d(K_2,G)^2\le 2d(P_3,G)\le 3d(K_2,G)\implies d(K_2,G)\le\frac{1}{2}. }[/math]
The important ideas from this proof which will be generalized in the theory of flag algebras are substitutions such as [math]\displaystyle{ d(P_3,G)\to 3d(K_2,G)^2 }[/math], the use of labeled graph densities, considering only the "limit case" of the densities, and applying Cauchy at the end to get a meaningful result.[4]
Definition
Fix a collection of forbidden subgraphs [math]\displaystyle{ \mathcal{H} }[/math] and consider the set of graphs [math]\displaystyle{ \mathcal{G} }[/math] of [math]\displaystyle{ \mathcal{H} }[/math]-free graphs. Now, define a type of size [math]\displaystyle{ k }[/math] to be a graph [math]\displaystyle{ \sigma\in\mathcal G }[/math] with labeled vertices [math]\displaystyle{ V(\sigma)=[k] }[/math]. The type of size 0 is typically denoted as [math]\displaystyle{ \varnothing }[/math].
First, we define a [math]\displaystyle{ \sigma }[/math]-flag, a partially labeled graph which will be crucial for the theory of flag algebras:
Definition: A [math]\displaystyle{ \sigma }[/math]-flag is a pair [math]\displaystyle{ (F,\theta) }[/math] where [math]\displaystyle{ F\in\mathcal G }[/math] is an underlying, unlabeled, [math]\displaystyle{ \mathcal H }[/math]-free graph, while [math]\displaystyle{ \theta:[k]\to V(F) }[/math] defines a labeled graph embedding of [math]\displaystyle{ \sigma }[/math] onto the vertices [math]\displaystyle{ F }[/math].
Denote the set of [math]\displaystyle{ \sigma }[/math]-flags to be [math]\displaystyle{ \mathcal F^\sigma }[/math] and the set of [math]\displaystyle{ \sigma }[/math]-flags of size [math]\displaystyle{ n }[/math] to be [math]\displaystyle{ \mathcal F^\sigma_n }[/math]. As an example, [math]\displaystyle{ P_3^b }[/math] from the proof of Mantel's Theorem above is a [math]\displaystyle{ \sigma }[/math]-flag where [math]\displaystyle{ \sigma }[/math] is a type of size 1 corresponding to a single vertex.
For [math]\displaystyle{ \sigma }[/math]-flags [math]\displaystyle{ F_1,F_2,\ldots,F_t,(G,\theta) }[/math] satisfying [math]\displaystyle{ |G|-|\sigma|\ge \sum_{i=1}^t |F_i|-|\sigma| }[/math], we can define the density of the [math]\displaystyle{ \sigma }[/math]-flags onto the underlying graph [math]\displaystyle{ G }[/math] in the following way:
Definition: The density [math]\displaystyle{ p(F_1,F_2,\ldots,F_t;G) }[/math] of the [math]\displaystyle{ \sigma }[/math]-flags [math]\displaystyle{ F_1,\ldots,F_t }[/math] in [math]\displaystyle{ G }[/math] is defined to be the probability of successfully randomly embedding [math]\displaystyle{ F_1,\ldots,F_t }[/math] into [math]\displaystyle{ V(G) }[/math] such that they are nonintersecting on [math]\displaystyle{ V(G)\setminus\mathrm{im}(\theta) }[/math] and are all labeled in the exact same way as [math]\displaystyle{ G }[/math] on [math]\displaystyle{ \mathrm{im}(\theta) }[/math]. More precisely, choose pairwise disjoint [math]\displaystyle{ U_1,U_2,\ldots,U_t\subseteq V(G)\setminus\mathrm{im}(\theta) }[/math] at random and define [math]\displaystyle{ p(F_1,\ldots,F_t;G) }[/math] to be the probability that the [math]\displaystyle{ \sigma }[/math]-flag [math]\displaystyle{ (G[U_i\cup\mathrm{im}(\theta)],\theta) }[/math] is isomorphic to [math]\displaystyle{ F_i }[/math] for all [math]\displaystyle{ i\in[t] }[/math].
Note that, when embedding [math]\displaystyle{ F }[/math] into [math]\displaystyle{ G }[/math], where [math]\displaystyle{ F,G }[/math] are [math]\displaystyle{ \sigma }[/math]-flags, it can be done by first embedding [math]\displaystyle{ F }[/math] into a [math]\displaystyle{ \sigma }[/math]-flag [math]\displaystyle{ F' }[/math] of size [math]\displaystyle{ n\in[|F|,|G|] }[/math] and then embedding [math]\displaystyle{ F' }[/math] into [math]\displaystyle{ G }[/math], which gives the formula: [math]\displaystyle{ p(F;G)=\sum_{F'\in \mathcal F^\sigma_n}p(F;F')p(F';G) }[/math]. Extending this to sets of [math]\displaystyle{ \sigma }[/math]-flags gives the Chain Rule:
Theorem (Chain Rule): If [math]\displaystyle{ F_1,F_2,\ldots,F_t,G }[/math] are [math]\displaystyle{ \sigma }[/math]-flags, [math]\displaystyle{ s,n }[/math] are naturals such that [math]\displaystyle{ F_1,\ldots,F_t }[/math] fit in [math]\displaystyle{ G }[/math], [math]\displaystyle{ F_1,\ldots,F_s }[/math] fit in a [math]\displaystyle{ \sigma }[/math]-flag of size [math]\displaystyle{ n }[/math], and a [math]\displaystyle{ \sigma }[/math]-flag of size [math]\displaystyle{ n }[/math] combined with [math]\displaystyle{ F_{s+1},\ldots,F_t }[/math] fit in [math]\displaystyle{ G }[/math], then
[math]\displaystyle{ p(F_1,F_2,\ldots,F_t;G)=\sum_{F\in\mathcal F^\sigma_n}p(F_1,\ldots,F_s;F)p(F,F_{s+1},\ldots,F_t;G) }[/math].
Recall that the previous proof for Mantel's involved linear combinations of terms of the form [math]\displaystyle{ d(H,G) }[/math]. The relevant ideas were slightly imprecise with letting [math]\displaystyle{ |G| }[/math] tend to infinity, but explicitly there is a sequence [math]\displaystyle{ G_1,G_2,\ldots }[/math] such that [math]\displaystyle{ d(H,G_i) }[/math] converges to some [math]\displaystyle{ \phi(H) }[/math] for all [math]\displaystyle{ H }[/math], where [math]\displaystyle{ \phi }[/math] is called a limit functional. Thus, all references to [math]\displaystyle{ d(H,G) }[/math] really refer to the limit functional. Now, graph homomorphism inequalities can be written as linear combinations of [math]\displaystyle{ \phi }[/math] with different [math]\displaystyle{ H }[/math]s, but it would be convenient to express them as a single term. This motivates defining [math]\displaystyle{ \mathbb R\mathcal F^\sigma }[/math], the set of formal linear combinations of [math]\displaystyle{ \sigma }[/math]-flags over [math]\displaystyle{ \mathbb R }[/math], and now [math]\displaystyle{ \phi }[/math] can be extended to a linear function over [math]\displaystyle{ \mathbb R\mathcal F^\sigma }[/math].
However, using the full space [math]\displaystyle{ \mathbb R\mathcal F^\sigma }[/math] is wasteful when investigating just limit functionals, since there exist nontrivial relations between densities of certain [math]\displaystyle{ \sigma }[/math]-flags. In particular, the Chain Rule shows that
[math]\displaystyle{ \phi(F)=\phi\left(\sum_{F'\in\mathcal F^\sigma_n}p(F;F')F'\right)\implies F-\sum_{F'\in\mathcal F^\sigma_n}p(F;F')F'\in\ker\phi }[/math]
is always true. Rather than dealing with all of these elements of the kernel, let the set of expressions of the above form (ie. those obtained from Chain Rule with a single [math]\displaystyle{ \sigma }[/math]-flag) as [math]\displaystyle{ \mathcal K^\sigma }[/math] and quotient them out in our final analysis. These ideas combine to form the definition for a flag algebra:
Definition (Flag Algebras): A flag algebra is defined on the space of linear combinations of [math]\displaystyle{ \sigma }[/math]-flags [math]\displaystyle{ \mathcal A^\sigma = \mathbb R\mathcal F^\sigma/\mathcal K^\sigma }[/math] equipped with bilinear operator
[math]\displaystyle{ F\cdot G=\sum_{H\in \mathcal F^\sigma_n}p(F,G;H)H }[/math]
for [math]\displaystyle{ F,G\in \mathcal F^\sigma }[/math] and any natural [math]\displaystyle{ n }[/math] such that [math]\displaystyle{ F,G }[/math] fit in a [math]\displaystyle{ \sigma }[/math]-flag of size [math]\displaystyle{ n }[/math], extending the operator linearly to [math]\displaystyle{ \mathbb R\mathcal F^\sigma }[/math].
It remains to check that the choice of [math]\displaystyle{ n }[/math] does not matter for a pair [math]\displaystyle{ F,G }[/math] provided it is large enough (this can be proven with Chain Rule) as well as that if [math]\displaystyle{ f\in \mathcal K^\sigma }[/math] then [math]\displaystyle{ f\cdot g\in\mathcal K^\sigma }[/math], meaning that the operator respects the quotient and thus forms a well-defined algebra on the desired space.
One important result of this definition for the operator is that multiplication is respected on limit functionals. In particular, for a limit functional [math]\displaystyle{ \phi }[/math], the identity [math]\displaystyle{ \phi(f\cdot g)=\phi(f)\cdot\phi(g) }[/math] holds true. For example, it was shown that [math]\displaystyle{ \phi(P_3^b)=\phi(K_2^b)^2 }[/math] in our proof for Mantel's, and this result is just a corollary of this statement. More generally, the fact that [math]\displaystyle{ \phi }[/math] is multiplicative means that all limit functionals are algebra homomorphisms between [math]\displaystyle{ \mathcal A^\sigma }[/math] and [math]\displaystyle{ \mathbb R }[/math].
The downward operator
The definition above provides a framework for dealing with [math]\displaystyle{ \sigma }[/math]-flags, which are partially labeled graphs. However, most of the time, unlabeled graphs, or [math]\displaystyle{ \varnothing }[/math]-flags, are of greatest interest. To get from the former to the latter, define the downward operator.
The downward operator is defined in the most natural way: given a [math]\displaystyle{ \sigma }[/math]-flag [math]\displaystyle{ F }[/math], let [math]\displaystyle{ \downarrow\!\!F }[/math] to be the [math]\displaystyle{ \varnothing }[/math]-flag resulting from forgetting the labels assigned to [math]\displaystyle{ \sigma }[/math]. Now, to define a natural mapping between [math]\displaystyle{ \sigma }[/math]-flags and unlabeled graphs, let [math]\displaystyle{ q_\sigma(F) }[/math] be the probability that an injective map [math]\displaystyle{ \theta:[k]\to V(F) }[/math] taken at random has image isomorphic to [math]\displaystyle{ \sigma }[/math], and define [math]\displaystyle{ [\![F]\!]_\sigma=q_\sigma(F)\downarrow\!\!F }[/math]. Extending [math]\displaystyle{ [\![\cdot]\!] }[/math] linearly to [math]\displaystyle{ \mathbb R\mathcal F^\sigma }[/math] gives a valid linear map which sends combinations of [math]\displaystyle{ \sigma }[/math]-flags to combinations of unlabeled ones.
The most important result regarding [math]\displaystyle{ [\![\cdot]\!] }[/math] is its averaging properties. In particular, fix a [math]\displaystyle{ \sigma }[/math]-flag [math]\displaystyle{ F }[/math] and unlabeled graph [math]\displaystyle{ G }[/math] with [math]\displaystyle{ |G|\ge |F| }[/math], then choosing an embedding [math]\displaystyle{ \theta }[/math] of [math]\displaystyle{ \sigma }[/math] on [math]\displaystyle{ G }[/math] at random defines random variable [math]\displaystyle{ p(F;(G,\theta)) }[/math]. It can be shown that
[math]\displaystyle{ \mathbb E[p(F;(G,\theta)]=\frac{q_\sigma(F)p(\downarrow\!\!F;G)}{q_\sigma(\sigma)p(\downarrow\!\!\sigma;G)}. }[/math]
Optimization with flag algebras
All linear functionals, [math]\displaystyle{ \phi }[/math] are algebra homomorphisms [math]\displaystyle{ \phi:\mathcal A^\sigma\to\mathbb R }[/math]. Furthermore, by definition, [math]\displaystyle{ \phi(F)\ge 0 }[/math] for any [math]\displaystyle{ \sigma }[/math]-flag [math]\displaystyle{ F }[/math] since [math]\displaystyle{ \phi }[/math] represents a density limit. Thus, say that a homomorphism [math]\displaystyle{ \psi\in\operatorname{Hom}(\mathcal A^\sigma,\mathbb R) }[/math] is positive if and only if [math]\displaystyle{ \psi(F)\ge 0\forall F\in\mathcal F^\sigma }[/math], and let [math]\displaystyle{ \operatorname{Hom}^+(A^\sigma,\mathbb R) }[/math] be the set of positive homomorphisms. One can show that the set of limit functionals [math]\displaystyle{ \Phi }[/math] is exactly the set of positive homomorphisms [math]\displaystyle{ \operatorname{Hom}^+(A^\sigma,\mathbb R) }[/math], so it suffices to understand the latter definition of the set.
In order for a linear combination [math]\displaystyle{ f\in\mathcal A^\sigma }[/math] to yield a valid graph homomorphism inequality, it needs to be nonnegative over all possible linear functionals, which will then imply that it is true for all graphs. With this in mind, define the semantic cone of type [math]\displaystyle{ \sigma }[/math], a set [math]\displaystyle{ \mathcal S^\sigma\subset \mathcal A^\sigma }[/math] such that
[math]\displaystyle{ \mathcal S^\sigma=\{f\in \mathcal A^\sigma \mid \phi(f)\ge 0\,\,\,\forall \phi\in\operatorname{Hom}^+(\mathcal A^\sigma,\mathbb R)\}. }[/math]
Once again, [math]\displaystyle{ \sigma=\varnothing }[/math] is the case of most interest, which corresponds to the case of unlabeled graphs. However, the downward operator has the property of mapping [math]\displaystyle{ \mathcal S^\sigma }[/math] to [math]\displaystyle{ \mathcal S^\varnothing }[/math], and it can be shown that the image of [math]\displaystyle{ \mathcal S^\sigma }[/math] under [math]\displaystyle{ [\![\cdot]\!]_\sigma }[/math] is a subset of [math]\displaystyle{ \mathcal S^\varnothing }[/math], meaning that any results on the type [math]\displaystyle{ \sigma }[/math] semantic cone readily generalize to unlabeled graphs as well.
Just by naively manipulating elements of [math]\displaystyle{ \mathcal A^\sigma }[/math], numerous elements of the semantic cone [math]\displaystyle{ \mathcal S^\sigma }[/math] can be generated. For example, since elements of [math]\displaystyle{ \operatorname{Hom}^+(\mathcal A^\sigma,\mathbb R) }[/math] are nonnegative for [math]\displaystyle{ \sigma }[/math]-flags, any conical combination of elements of [math]\displaystyle{ \mathcal F^\sigma }[/math] will yield an element of [math]\displaystyle{ \mathcal S^\sigma }[/math]. Perhaps more non-trivially, any conical combination of squares of elements of [math]\displaystyle{ A^\sigma }[/math] will also yield an element of the semantic cone.
Though one can find squares of flags which sum to nontrivial results manually, it is often simpler to automate the process. In particular, it is possible to adapt the ideas in sum-of-squares optimization for polynomials to flag algebras. Define the degree of a vector [math]\displaystyle{ f\in\mathbb R\mathcal F^\sigma }[/math] to be the largest flag with nonzero coefficient in the expansion of [math]\displaystyle{ f }[/math], and let the degree of [math]\displaystyle{ f^*\in\mathcal A^\sigma }[/math] to be the minimum degree of a vector over all choices in [math]\displaystyle{ f^*+\mathcal K^\sigma }[/math]. Also, define [math]\displaystyle{ v_{\sigma,n}=\mathcal F^\sigma_n\to\mathcal A^\sigma }[/math] as the canonical embedding sending [math]\displaystyle{ F }[/math] to itself for all [math]\displaystyle{ F\in\mathcal F^\sigma_n }[/math]. These definitions give rise to the following flag-algebra analogue:
Theorem: Given [math]\displaystyle{ f\in\mathcal A^\sigma }[/math], [math]\displaystyle{ n\ge|\sigma| }[/math], then there exist [math]\displaystyle{ g_1,\ldots,g_t\in\mathcal A^\sigma }[/math] for some [math]\displaystyle{ t\ge 1 }[/math] if and only if there is a positive semidefinite matrix [math]\displaystyle{ Q:\mathcal F^\sigma_n\times\mathcal F^\sigma_n\to\mathbb R }[/math] such that [math]\displaystyle{ f=v_{\sigma,n}^\intercal Qv_{\sigma,n} }[/math].
With this theorem, graph homomorphism problems can now be relaxed into semidefinite programming ones which can be solved via computer. For example, Mantel's Theorem can be rephrased as finding the smallest [math]\displaystyle{ \lambda\in\mathbb R }[/math] such that [math]\displaystyle{ \lambda\varnothing-K_2\in S^\varnothing }[/math]. As [math]\displaystyle{ S^\varnothing }[/math] is poorly understood, it is difficult to make progress on the question in this form, but note that conic combinations of [math]\displaystyle{ \varnothing }[/math]-flags and squares of vectors lie in [math]\displaystyle{ S^\varnothing }[/math], so instead take a semidefinite relaxation. In particular, minimize [math]\displaystyle{ \lambda }[/math] under the constraint that [math]\displaystyle{ \lambda\varnothing-K_2=r+[\![v_{1,2}^\intercal Qv_{1,2}]\!] }[/math] where [math]\displaystyle{ r }[/math] is a conic combination of [math]\displaystyle{ \varnothing }[/math]-flags and [math]\displaystyle{ Q }[/math] is positive semi-definite. This new optimization problem can be transformed into a semidefinite-programming problem which is then solvable with standard algorithms.[5]
Generalizations
The method of flag algebras readily generalizes to numerous graph-like constructs. As Razborov wrote in his original paper, flags can be described with finite model theory instead. Instead of graphs, models of some nondegenerate universal first-order theory [math]\displaystyle{ T }[/math] with equality in a finite relational signature [math]\displaystyle{ L }[/math] with only predicate symbols can be used. A model [math]\displaystyle{ M }[/math], which replaces our previous notion of a graph, has ground set [math]\displaystyle{ V(M) }[/math], whose elements are called vertices.
Now, defining sub-models and model embeddings in an analogous way to subgraphs and graph embeddings, all of the definitions and theorems above can be nearly directly translated into the language of model theory. The fact that the theory of flag algebras generalizes well means that it can be used not only to solve problems in simple graphs, but also similar constructs such as, but not limited to, directed graphs and hypergraphs.
References
- ↑ Razborov, Alexander (December 2007). "Flag algebras". The Journal of Symbolic Logic 72 (4): 1239–1282. doi:10.2178/jsl/1203350785. http://people.cs.uchicago.edu/~razborov/files/flag.pdf. Retrieved 27 November 2021.
- ↑ Hatami, Hamed; Hladký, Jan; Král, Daniel; Norine, Serguei; Razborov, Alexander (2013). "On the Number of Pentagons in Triangle-Free Graphs". Journal of Combinatorial Theory, Series A 120 (3): 722–732. doi:10.1016/j.jcta.2012.12.008.
- ↑ Bondy, John Adrian (1997). "Counting Subgraphs: A new approach to the Caccetta-Häggkvist conjecture". Discrete Mathematics 165/166: 71–80. doi:10.1016/S0012-365X(96)00162-8. https://core.ac.uk/download/pdf/82752966.pdf. Retrieved 27 November 2021.
- ↑ De Carli Silva, Marcel K.; De Oliveira Filho, Fernando Mário; Sato, Cristiane Maria (September 2016). "Flag Algebras: A First Glance". Nieuw Archief voor Wiskunde. http://www.nieuwarchief.nl/serie5/pdf/naw5-2016-17-3-193.pdf.
- ↑ Razborov, Alexander (November 2013). "What is a Flag Algebra". Notices of the AMS 60 (10): 1324–1327. https://www.ams.org/notices/201310/rnoti-p1324.pdf. Retrieved 27 November 2021.
Original source: https://en.wikipedia.org/wiki/Flag algebra.
Read more |