Subset: proving inclusion from an arbitrary element and refuting it by a counterexample

On this page
  1. Goal and scope
  2. Givens and symbols
  3. Rules and sources
  4. Main derivation
  5. Substeps and lemmas
  6. Reverse audits
  7. Error controls and negative controls
  8. Result and limitations
  9. Verification and source binding

← Guide index · Original MKO

derivation-mko-subset-01 · production-20261019-adopted-96

Goal and scope

In the universe ℤ, let A be the set of multiples of 6, B the set of even integers and C the set of multiples of 4. Prove A⊆B and that this inclusion is strict (A≠B); prove A⊄C even though A and C share the element 12; note that B⊆B holds (⊆ allows equality); and prove {6}⊆A ⇔ 6∈A while separating the type roles of the two statements.

Treats only sets in the single universe ℤ (MKO assumption a1) and shows how the subset definition is unfolded, proved and refuted. Closure of the integers under multiplication and their discreteness are used as prerequisites and are not derived from axioms for the integers. It does not bind the Lean definition Set.Subset, and does not change the canonical MKO or its English edition.

Givens and symbols

  • set_builder
  • subset_def
  • int_closure
  • int_discrete
  • order_basics
  • G1 — The universe is the set of integers ℤ; every set in this guide is a subset of ℤ, so any two of them lie in the same universe (MKO assumption a1).
  • G2 — A={n∈ℤ ∣ n=6k for some k∈ℤ}, B={n∈ℤ ∣ n=2m for some m∈ℤ}, C={n∈ℤ ∣ n=4j for some j∈ℤ}.
  • \mathbb{Z} — the integers, the universe here
  • A,B,C — multiples of 6, even integers, multiples of 4
  • A\subseteq B — A is a subset of B (non-strict inclusion)
  • A\subsetneq B — A is a proper subset of B
  • x\in A — the element x belongs to the set A
  • \{a\} — the singleton set containing a

Rules and sources

  • set_builder · prerequisite — Set-builder notation: x∈{y∈A ∣ P(y)} if and only if x∈A and P(x).
  • subset_def · prerequisite — Subset: A⊆B means every element of A is an element of B, i.e. ∀x (x∈A⇒x∈B).
  • order_basics · prerequisite — Order of the reals: exactly one of u<v, u=v, u>v holds; u<v and v<w give u<w; u<v gives u+w<v+w; u<v and w>0 give uw<vw; u<v and w<0 give uw>vw.
  • def_intro · prerequisite — Introducing a definition: a statement, expression or object may be given a name, after which the name and what it stands for are interchangeable.
  • def_unfold · prerequisite — Unfolding a definition: replacing a defined term by its definition (or folding it back) does not change whether a statement is true.
  • exists_elim · prerequisite — ∃-elimination: from ∃x∈D, P(x) we may name some element a with P(a) by a fresh name; reasoning with a is allowed as long as the final conclusion does not mention a.
  • eq_replace · prerequisite — Replacement of equals: an expression inside a statement may be replaced by an equal expression without changing whether the statement is true.
  • numeric_evaluation · prerequisite — Exact evaluation of an explicit integer or rational expression; independently recomputable.
  • mul_assoc · prerequisite — Associativity of multiplication: (uv)w=u(vw).
  • exists_intro · prerequisite — ∃-introduction: if some a∈D satisfies P(a), then ∃x∈D, P(x).
  • forall_intro · prerequisite — ∀-introduction (generalization): if a statement is proved for an arbitrary element x, with no extra assumption on x, it holds for every x in the domain.
  • imp_intro · prerequisite — →-introduction (discharging a hypothesis): if Q is derived inside a scope that temporarily assumes P, then P⇒Q follows, and P may no longer be used as known.
  • quantifier_negation · prerequisite — Negating quantifiers: ¬(∀x, P(x)) is equivalent to ∃x, ¬P(x), and ¬(∃x, P(x)) is equivalent to ∀x, ¬P(x).
  • case_analysis · prerequisite — Proof by cases: if P∨Q holds and both P⇒R and Q⇒R are proved, then R holds. The cases must cover every possibility.
  • set_extensionality · prerequisite — Set equality: A=B if and only if A⊆B and B⊆A, i.e. they have the same elements.
  • and_intro_elim · prerequisite — Conjunction: from P and Q infer P∧Q; from P∧Q infer P and infer Q.
  • logic_chain · prerequisite — Chaining: from P⇒Q and Q⇒R infer P⇒R; likewise for ⇔.
  • set_operations_def · prerequisite — Set operations: x∈A∪B ⇔ x∈A or x∈B; x∈A∩B ⇔ x∈A and x∈B; x∈A∖B ⇔ x∈A and x∉B; in a universe U, Aᶜ=U∖A.
  • forall_elim · prerequisite — ∀-elimination (instantiation): if ∀x∈D, P(x) holds and a∈D, then P(a) holds.
  • eq_refl_symm_trans · prerequisite — Properties of equality: u=u; if u=v then v=u; if u=v and v=w then u=w.
  • mko_subset_def · cited — For sets A and B in the same universe, A⊆B if and only if, for every object x, x∈A implies x∈B. · mko-subset
  • int_closure · prerequisite — The integers are closed under addition and multiplication: if a, b∈ℤ then a+b∈ℤ and ab∈ℤ.
  • int_discrete · prerequisite — Discreteness of the integers: for integers k and c, either k≤c or k≥c+1; no integer lies strictly between c and c+1.
  • proper_subset_def · prerequisite — Proper subset: A⊊B if and only if A⊆B and A≠B.
  • neg_imp · prerequisite — Negating an implication: ¬(P⇒Q) is equivalent to P∧¬Q.
  • singleton_def · prerequisite — Singleton: x∈{a} if and only if x=a.
  • L_6k_ne_2 · lemma — For every integer k, 6k≠2.
  • L_4j_ne_6 · lemma — For every integer j, 4j≠6.
  • L_singleton_subset · lemma — For any set S and any object a of the same universe: {a}⊆S ⇔ a∈S.

Main derivation

S01 · definition

Before

\text{multiples of }6,\ \text{even integers},\ \text{multiples of }4\ \text{in }\mathbb{Z}

After

A=\{n\in\mathbb{Z}\mid\exists k\in\mathbb{Z},\ n=6k\},\ B=\{n\in\mathbb{Z}\mid\exists m\in\mathbb{Z},\ n=2m\},\ C=\{n\in\mathbb{Z}\mid\exists j\in\mathbb{Z},\ n=4j\}

Conditions: none

Rule: def_intro · Uses: G1, G2

Leaf basis: def_intro + set_builder

Name the three sets with set-builder notation. All three consist of elements of ℤ, so they lie in the same universe ℤ, as MKO assumption a1 requires; only then is comparing them by inclusion meaningful. By set_builder, n∈A means exactly that n∈ℤ and n=6k for some integer k, and likewise for B and C.

S02 · equivalent

Before

A\subseteq B

After

\forall x\ (x\in A\Rightarrow x\in B)

Conditions: A,B\subseteq\mathbb{Z}

Rule: mko_subset_def · Uses: S01, mko_subset_def

Leaf basis: mko_subset_def + subset_def + def_unfold

Unfold the goal by the MKO's definition: A⊆B holds exactly when, for every object x, x∈A implies x∈B. For objects outside ℤ, x∈A is false and the implication holds automatically, so in effect only x∈ℤ needs checking. The step turns a statement about two sets into a universal statement about all elements; proving it requires handling an arbitrary x, not a few chosen elements.

S03 · equivalent

Before

x\in A\ \ (x\in\mathbb{Z}\ \text{arbitrary})

After

\exists k\in\mathbb{Z},\ x=6k

Conditions: x\in\mathbb{Z}

Rule: set_builder · Uses: S01, S02

Leaf basis: set_builder + def_unfold

Take an arbitrary x∈ℤ and temporarily assume x∈A (this assumption is discharged in S07). By the set-builder definition of A, x∈A is equivalent to 'x=6k for some integer k'. Nothing is assumed about x beyond x∈ℤ and this temporary assumption.

S04 · implies

Before

\exists k\in\mathbb{Z},\ x=6k

After

x=6k_0,\ k_0\in\mathbb{Z}

Conditions: none

Rule: exists_elim · Uses: S03

Leaf basis: exists_elim

By ∃-elimination, give some integer with this property the fresh name k₀, so x=6k₀. k₀ only names that integer, and the final conclusion x∈B does not mention k₀, so this is allowed.

S05 · equivalent

Before

x=6k_0

After

x=2(3k_0)

Conditions: none

Rule: eq_replace · Uses: S04

Leaf basis: numeric_evaluation + mul_assoc + eq_replace

Write 6 as 2·3 and use associativity of multiplication: 6k₀=(2·3)k₀=2(3k₀). Both sides are the same integer, so the truth of the equation is unchanged. This is the only computation in the proof, and it holds for every k₀ (N1 checks it as a polynomial identity).

S06 · implies

Before

x=2(3k_0),\ k_0\in\mathbb{Z}

After

x\in B

Conditions: 3k_0\in\mathbb{Z}

Rule: exists_intro · Uses: S04, S05, int_closure

Leaf basis: int_closure + exists_intro + set_builder

Since 3 and k₀ are integers, closure under multiplication gives 3k₀∈ℤ. So m=3k₀ is an integer with x=2m; by ∃-introduction and the set-builder definition of B, x∈B.

S07 · implies

Before

x\in A\ \text{assumed}\ \vdash\ x\in B,\quad x\in\mathbb{Z}\ \text{arbitrary}

After

A\subseteq B

Conditions: none

Rule: forall_intro · Uses: S02, S03, S06

Leaf basis: imp_intro + forall_intro + def_unfold

First discharge the temporary assumption of S03 by →-introduction, giving x∈A⇒x∈B; from here on x∈A is no longer treated as known. S03 to S06 used only x∈ℤ and did not pick a particular x, so ∀-introduction gives ∀x∈ℤ (x∈A⇒x∈B); objects outside ℤ satisfy it automatically, as noted in S02. Folding the definition back by S02 gives A⊆B.

S08 · implies

Before

2=2\cdot 1,\quad 2\in A\iff\exists k\in\mathbb{Z},\ 6k=2

After

2\in B,\ 2\notin A

Conditions: none

Rule: L_6k_ne_2 · Uses: S01

Leaf basis: set_builder + exists_intro + quantifier_negation + int_discrete + order_basics

2=2·1 with 1∈ℤ, so 2∈B. On the other hand, by the definition of A, 2∈A would need an integer k with 6k=2; Lemma L_6k_ne_2 (proved in S08.1 and S08.2) says there is no such integer, so by negating the quantifier, 2∉A.

S09 · implies

Before

A\subseteq B,\ 2\in B,\ 2\notin A

After

A\neq B,\ A\subsetneq B

Conditions: none

Rule: proper_subset_def · Uses: S07, S08

Leaf basis: set_extensionality + proper_subset_def + and_intro_elim

By the criterion for set equality, A=B would require the same elements; 2 is in B but not in A, so A≠B. Together with A⊆B from S07, the definition of proper subset gives A⊊B. Strictness is an extra fact proved here; it is not part of what A⊆B means.

S10 · equivalent

Before

B\subseteq B

After

\forall x\ (x\in B\Rightarrow x\in B)

Conditions: none

Rule: mko_subset_def · Uses: S01, mko_subset_def

Leaf basis: mko_subset_def + imp_intro + forall_intro

Apply the same definition with both sets equal to B: B⊆B is equivalent to 'for every x, x∈B⇒x∈B'. Every statement implies itself (assuming x∈B, the conclusion x∈B is that very assumption), so the right side holds and B⊆B holds. This shows that ⊆ is non-strict: inclusion holds when the two sets are equal, and A⊆B does not require A≠B.

S11 · equivalent

Before

\neg(A\subseteq C)

After

\exists x\ (x\in A\land x\notin C)

Conditions: none

Rule: quantifier_negation · Uses: S01, mko_subset_def

Leaf basis: mko_subset_def + quantifier_negation + neg_imp

To negate A⊆C, first write it by the definition as ¬∀x (x∈A⇒x∈C). Negating the quantifier gives ∃x ¬(x∈A⇒x∈C), and negating the implication gives ∃x (x∈A ∧ x∉C). So refuting inclusion needs just one counterexample: an element of A that is not in C.

S12 · implies

Before

6=6\cdot 1,\quad 6\in C\iff\exists j\in\mathbb{Z},\ 4j=6

After

6\in A,\ 6\notin C

Conditions: none

Rule: L_4j_ne_6 · Uses: S01

Leaf basis: set_builder + exists_intro + quantifier_negation + int_discrete + order_basics

6=6·1 with 1∈ℤ, so 6∈A. By the definition of C, 6∈C would need an integer j with 4j=6; Lemma L_4j_ne_6 (proved in S12.1 and S12.2) says there is no such integer, so 6∉C.

S13 · implies

Before

6\in A\land 6\notin C

After

A\not\subseteq C

Conditions: none

Rule: exists_intro · Uses: S11, S12

Leaf basis: exists_intro + and_intro_elim + logic_chain

Take x=6 as the witness: S12 gives 6∈A and 6∉C, so ∃-introduction gives ∃x (x∈A ∧ x∉C); by the equivalence S11, A⊄C. One counterexample is enough to refute inclusion.

S14 · implies

Before

12=6\cdot 2,\ 12=4\cdot 3

After

12\in A\cap C\ \text{and yet}\ A\not\subseteq C

Conditions: none

Rule: set_operations_def · Uses: S01, S13

Leaf basis: set_builder + exists_intro + set_operations_def + numeric_evaluation

12=6·2 and 12=4·3 with integer witnesses 2 and 3, so 12∈A and 12∈C, that is 12∈A∩C. Yet S13 proved A⊄C. So finding a common element does not establish inclusion; inclusion is a requirement on every element of A.

S15 · equivalent

Before

\{6\}\subseteq A

After

6\in A

Conditions: none

Rule: L_singleton_subset · Uses: S12

Leaf basis: singleton_def + subset_def + forall_elim + forall_intro + eq_replace

By Lemma L_singleton_subset (with S=A and a=6), {6}⊆A and 6∈A are true or false together; S12 proved 6∈A, so {6}⊆A holds as well. The two statements have the same truth value but are not the same statement: 6∈A compares an element with a set, while {6}⊆A compares two sets.

S16 · implies

Before

A\subseteq B,\ 2\in B\setminus A,\ 6\in A\setminus C,\ 6\in A

After

A\subsetneq B,\ A\not\subseteq C,\ B\subseteq B,\ \{6\}\subseteq A

Conditions: none

Rule: and_intro_elim · Uses: S07, S09, S10, S13, S14, S15

Leaf basis: and_intro_elim

Collect the results: A⊊B (S07, S09); A⊄C even though 12∈A∩C (S13, S14); B⊆B shows that ⊆ allows equality (S10); {6}⊆A and 6∈A are both true but play different type roles (S15).

Substeps and lemmas

S08.1 · case_split

Before

k\in\mathbb{Z}

After

k\le 0\ \lor\ k\ge 1

Conditions: k\in\mathbb{Z}

Rule: int_discrete · Uses: int_discrete

Leaf basis: int_discrete + case_analysis

Let k be any integer. By discreteness of the integers (with c=0), k≤0 or k≥1, with no third possibility; the two cases cover every integer.

S08.2 · implies

Before

k\le 0\ \lor\ k\ge 1

After

6k\neq 2

Conditions: 6>0

Rule: case_analysis · Uses: S08.1, order_basics

Leaf basis: order_basics + case_analysis + forall_intro + numeric_evaluation

Case 1: k≤0. Multiplying by the positive number 6 gives 6k≤0<2, so 6k≠2. Case 2: k≥1. Multiplying by 6 gives 6k≥6>2, so 6k≠2. Both cases give 6k≠2, so proof by cases applies; since k was arbitrary, S08.1 and S08.2 together prove Lemma L_6k_ne_2.

S12.1 · case_split

Before

j\in\mathbb{Z}

After

j\le 1\ \lor\ j\ge 2

Conditions: j\in\mathbb{Z}

Rule: int_discrete · Uses: int_discrete

Leaf basis: int_discrete + case_analysis

Let j be any integer. By discreteness of the integers (with c=1), j≤1 or j≥2, and the two cases cover every integer.

S12.2 · implies

Before

j\le 1\ \lor\ j\ge 2

After

4j\neq 6

Conditions: 4>0

Rule: case_analysis · Uses: S12.1, order_basics

Leaf basis: order_basics + case_analysis + forall_intro + numeric_evaluation

Case 1: j≤1; multiplying by 4>0 gives 4j≤4<6. Case 2: j≥2; multiplying by 4 gives 4j≥8>6. Both cases give 4j≠6; since j was arbitrary, S12.1 and S12.2 together prove Lemma L_4j_ne_6.

S15.1 · implies

Before

\{a\}\subseteq S

After

a\in S

Conditions: none

Rule: forall_elim · Uses: singleton_def, subset_def

Leaf basis: singleton_def + eq_refl_symm_trans + subset_def + forall_elim

(⇒) By the definition of a singleton, a∈{a}, since a=a. {a}⊆S says every element of {a} is in S; instantiating this universal statement at x=a (∀-elimination) gives a∈S.

S15.2 · implies

Before

a\in S

After

\{a\}\subseteq S

Conditions: none

Rule: forall_intro · Uses: singleton_def, subset_def

Leaf basis: singleton_def + eq_replace + imp_intro + forall_intro + subset_def

(⇐) Suppose a∈S. Take an arbitrary x∈{a}; by the definition of a singleton x=a, and by replacement of equals x∈S. Since x was arbitrary, ∀-introduction and the subset definition give {a}⊆S. S15.1 and S15.2 together prove Lemma L_singleton_subset.

Reverse audits

  • S16 · sufficient_goal_reduction · S07, S09, S10, S13, S14, S15, and_intro_elim — Goal G is the conjunction of the conclusions of the problem; each conjunct is proved forwards by the listed steps, and this step only forms the conjunction; G is never used as a premise.
  • S15.2 · premise_audit · singleton_def, eq_replace, forall_intro, subset_def — This step proves only the ⇐ direction; together with S15.1 it gives the equivalence. Nothing is assumed about x except x∈{a}.
  • S15.1 · premise_audit · singleton_def, subset_def, forall_elim, eq_refl_symm_trans — It needs a∈{a}, which comes from reflexivity a=a. This step proves only the ⇒ direction.
  • S15 · inverse_equivalence · L_singleton_subset — The two directions of the lemma are proved in S15.1 and S15.2, so the equivalence holds both ways.
  • S14 · premise_audit · S13, set_builder, set_operations_def, exists_intro — This step only proves that a common element exists and sets it beside S13; it does not claim that a common element implies any inclusion.
  • S13 · sufficient_goal_reduction · S11, S12, exists_intro — Goal G: A⊄C. Sufficient condition H: some x has x∈A and x∉C; H⇒G by S11. H is proved forwards by the explicit witness of S12; G is never used as a premise.
  • S12.2 · premise_audit · S12.1, order_basics, case_analysis, forall_intro — 4>0 is needed to keep the inequality direction; only 4j≠6 is derived, and no converse is claimed.
  • S12.1 · premise_audit · int_discrete — The cases are not exhaustive for reals: j=3/2 gives exactly 4j=6 (N13), so the step must use that j is an integer.
  • S12 · premise_audit · L_4j_ne_6, set_builder, exists_intro, quantifier_negation — As in S08: membership needs one witness, while non-membership must rule out every integer j.
  • S11 · inverse_equivalence · mko_subset_def, quantifier_negation, neg_imp — The three rewrites (definition, quantifier negation, negated implication) are all equivalences, so the whole step holds both ways.
  • S10 · inverse_equivalence · mko_subset_def, imp_intro — As in S02 the definition is two-way; the universal statement on the right holds directly by →-introduction.
  • S09 · premise_audit · S07, S08, set_extensionality, proper_subset_def — A⊊B needs two facts: A⊆B (S07) and A≠B (the witness 2 from S08). The first alone does not give proper inclusion.
  • S08.2 · premise_audit · S08.1, order_basics, case_analysis, forall_intro — Multiplying by 6 keeps the direction of the inequality because 6>0. The conclusion is one-way: only 6k≠2 is derived, nothing more.
  • S08.1 · premise_audit · int_discrete — The cases must be exhaustive; for real numbers they are not (for example k=1/3, and 6·(1/3)=2), so this step must use that k is an integer.
  • S08 · premise_audit · L_6k_ne_2, set_builder, exists_intro, quantifier_negation — 2∈B needs one witness; 2∉A must rule out every integer k, which is the universal statement the lemma supplies. Trying only k=0 and k=1 would not be enough, which is why the lemma covers all integers by cases.
  • S07 · sufficient_goal_reduction · S02, S06, imp_intro, forall_intro — Goal G: A⊆B. Sufficient condition H: for arbitrary x∈ℤ, x∈A⇒x∈B; H⇒G by the equivalence S02. H is proved forwards from the definitions in S03 to S06 with x arbitrary; G is never used as a premise.
  • S06 · premise_audit · S05, int_closure, exists_intro, set_builder — The key is that the witness m=3k₀ really is an integer. With a non-integer witness (for example 3=2·(3/2)) membership in B would not follow. The converse x∈B⇒x∈A is not claimed: 2∈B but 2∉A (S08).
  • S05 · inverse_equivalence · mul_assoc, numeric_evaluation, eq_replace — Backward: 2(3k₀)=(2·3)k₀=6k₀, returning to x=6k₀; replacing equals by equals works both ways.
  • S04 · premise_audit · S03, exists_elim — It needs the existence statement of S03, and k₀ must be a fresh name that does not appear in the conclusion. It does not claim that k₀ is the only such integer (it is, but this guide does not need that).
  • S03 · inverse_equivalence · set_builder — Membership in a set-builder set is two-way: such a k gives x∈A, and x∈A supplies such a k.
  • S02 · inverse_equivalence · mko_subset_def, subset_def — The MKO's definition is an 'if and only if', so both unfolding and folding back are given by the definition.
  • S01 · premise_audit · G1, G2, def_intro, set_builder — This step only introduces names and derives no new fact. What it checks is the premise: all three sets draw their elements from ℤ, so they share a universe.

Error controls and negative controls

Checking some elements is not enough

The MKO names the mistake of asserting inclusion after checking only some elements. 12 lies in both A and C, yet A⊄C (6∈A∖C). Likewise, verifying that 6, 12, 18, 24, 30 are even shows only that these five elements lie in B and does not prove A⊆B; the proof here starts from an arbitrary x∈A (S03 to S07) and uses only x=6k₀ and the identity 6k₀=2(3k₀), so it covers every element of A.

⊆ is non-strict

Another mistake is to think A⊆B forces A≠B. S10 proves B⊆B, so ⊆ allows the two sets to be equal. To claim proper inclusion A⊊B one must prove A≠B separately, which S08 and S09 do with the witness 2∈B∖A; it cannot be read off from A⊆B.

x∈A and {x}⊆A are different statements

The MKO warns against treating x∈A and {x}⊆A as the same statement. S15 proves they are equivalent (true or false together), but their type roles differ: in 6∈A the left side is an integer, in {6}⊆A it is a set of integers. Writing 6⊆A is a type error (6 is not a set); in Lean's Set ℤ, {6}∈A is not a well-formed statement either, because the elements of A are integers, not sets of integers.

  • 12∈A and 12∈C, so A⊆C → reject — Inclusion requires every element of A to be in C; 6∈A but 6∉C (S12, S13).
  • 6, 12, 18, 24 and 30 are even, so A⊆B has been proved → reject — The conclusion is true, but finitely many examples do not prove a universal statement; the proof must start from an arbitrary x∈A (S03 to S07).
  • A⊆B requires A≠B, so B⊆B is false → reject — ⊆ is non-strict; S10 proves B⊆B.
  • 6∈B and 6∈A, so B⊆A → reject — 2∈B but 2∉A (S08), so B⊄A.
  • 6∈A and 6⊆A are the same statement → reject — 6 is an element, not a set, so 6⊆A is ill-typed; the statement equivalent to 6∈A is {6}⊆A, and even these two are different statements.

Result and limitations

In the universe ℤ, the set A of multiples of 6 is a subset, indeed a proper subset, of the set B of even integers (2∈B∖A); A is not a subset of the set C of multiples of 4 (6∈A∖C), even though 12 lies in both; B⊆B shows that ⊆ allows equality; {6}⊆A and 6∈A are equivalent but different statements.

  • Closure of the integers under multiplication and their discreteness (int_closure, int_discrete) are prerequisites; this guide does not derive them from axioms for the integers.
  • N10 checks 6k≠2 only for k from −20 to 20; it is a finite check and does not prove the universal statement, which is proved in S08.1 and S08.2. N11 and N12 are cross-checks by remainders, valid for those two numbers only; the argument does not depend on them.

Verification and source binding

14 declared checks for this guide; only the listed expressions are covered.

  • source commit: b28a5edbd46279b1db2a3f3f48bb3f447e18899f
  • adopted source SHA-256: 88bf090b03281e737b94f71d45f7b57b3e7962272b65b9b44ff45256ac8be3a0
  • original source SHA-256: 88bf090b03281e737b94f71d45f7b57b3e7962272b65b9b44ff45256ac8be3a0
  • Lean: NOT_RUN · independent AI: NOT_MEASURED

Same-source full JSON (formulas, ASTs, controls and revision log)