BRAGA

02 Writing02-02 Notes02-02-021

Because Since

Published 16 Apr 20267 min read
Contents
  1. 01Deep Breakdown
  2. 02Flowchart
  3. 03Real-world use
  4. 04The formula, piece by piece
  5. 05The formula in words
  6. 06Critical Concepts
  7. 07Step-by-step calculation (tiny example)
  8. 08Code examples
∵\because
(1)

Deep Breakdown

What it tells me (Situation Awareness): ∵\because (three dots arranged in an inverted triangle) means "because" or "since." It introduces the reason, justification, or premise that supports a prior statement. It is the counterpart to ∴\therefore (therefore), which marks the conclusion. In formal mathematical proofs you read top-to-bottom: premise first, conclusion second, but in shorthand notation the author may write the conclusion and then annotate it with ∵\because followed by the justification. In DA/DS you encounter ∵\because primarily in derivations, theorem proofs from textbooks, and in documenting the logical chain of reasoning that connects data evidence to a decision.

Flowchart

Observe or statesomethingWhy is it true?Because (∵):introduce thepremise orreasonReason 1: afact, axiom, orprior resultReason 2: adefinition orassumptionThe originalstatement isnow justified∴ Therefore: theconclusionfollows

Real-world use

Where it is used

Formal mathematical proofs in textbooks and papers, derivation of loss function formulas, documenting the chain of assumptions in a model specification, annotating analytical reasoning in reports where you want to trace a conclusion back to its evidence.

Problem it solves

When a mathematical statement appears on the page without explanation, the reader cannot verify whether it is correct or merely asserted. ∵\because provides the missing link: it names the rule, lemma, or fact that makes the statement true. Without this notation, proofs become opaque sequences of symbols. With it, each step is auditable.

How it solves the problem

∵\because acts as an explicit pointer: "this is the warrant for the preceding claim." In a two-column proof (common in geometry and linear algebra), the right column holds the justification (∵\because such-and-such theorem), and the left column holds the statement. The notation compresses this into inline shorthand.

Example in a business

In a model derivation doc: "OLS is unbiased, ∵\because E[β^]=β\mathbb{E}[\hat{\boldsymbol{\beta}}] = \boldsymbol{\beta} under the Gauss-Markov assumptions (linearity, full rank, zero conditional mean, homoskedasticity)." Here ∵\because introduces the assumptions that justify the claim about the estimator. A business analyst reading this can immediately find where to look if any assumption fails.

The formula, piece by piece

Breaking the notation:

  • ∵\because three dots in a downward triangle (∵\because). Unicode: U+2235. Pronounced "because" or "since."
  • ∴\therefore three dots in an upward triangle (∴\therefore). Unicode: U+2234. Pronounced "therefore."
  • Pattern in proofs: [claim]∵[reason][\text{claim}] \quad \because \quad [\text{reason}] Memory aid: the inverted triangle of ∵\because "pours" the reason downward into the conclusion, like pouring water into a funnel. The upright triangle of ∴\therefore "points upward" to the conclusion that rises from the premises below.

Common usage patterns:

  • Inline: "x>0  ∵  x=etx > 0 \; \because \; x = e^t for some tt, and exponentials are always positive."
  • Proof step: "Var(β^)=σ2(X⊤X)−1∵ε∼N(0,σ2I)\text{Var}(\hat{\beta}) = \sigma^2 (X^\top X)^{-1} \quad \because \quad \varepsilon \sim \mathcal{N}(0, \sigma^2 I) and β^=(X⊤X)−1X⊤y\hat{\beta} = (X^\top X)^{-1} X^\top y."

The formula in words

"The three-dot symbol ∵\because is read as 'because' or 'since.' It introduces the justification for the statement that precedes it. Think of it as the word 'because' in the sentence 'this is true because of that.' It signals: what follows is the evidence."

Critical Concepts

  1. Direction: ∵\because points backward to a reason. ∴\therefore points forward to a conclusion. A complete logical step in shorthand looks like: [reason]  ∴  [conclusion][\text{reason}] \; \therefore \; [\text{conclusion}] or [conclusion]  ∵  [reason][\text{conclusion}] \; \because \; [\text{reason}]. Both convey the same logical relationship.
  2. Not the same as implication: A  ⟹  BA \implies B is a formal logical connective with a truth table. ∵\because is a proof-writing abbreviation. It is used in informal and semi-formal proofs, not in symbolic logic formulas themselves.
  3. Auditable reasoning: in DA/DS reports, writing ∵\because before a justification forces you to be explicit about why a claim holds. This is good practice: if you cannot fill in what comes after ∵\because, the claim is unsupported.
  4. Domain vs. symbol: this symbol appears in mathematical writing, not in Python or R code. In code you use comments (# because ...) to serve the same communicative function.
  5. Pair with ∴\therefore: well-structured mathematical arguments alternate premises (marked ∵\because) with conclusions (marked ∴\therefore) to create a chain: A∵B,  B∵C,  ∴AA \because B, \; B \because C, \; \therefore A.

Step-by-step calculation (tiny example)

Task: write a short proof that if x=4x = 4, then x=2\sqrt{x} = 2, using ∵\because and ∴\therefore notation.

Step 1: State what you know (the premise) x=4∵x = 4 \quad \because \quad given (this is the assumption we are starting from).

Step 2: Apply a rule and justify it x=4∵\sqrt{x} = \sqrt{4} \quad \because \quad substituting the given value of x=4x = 4 into the square root.

Step 3: Compute and state the conclusion 4=2∵2×2=4\sqrt{4} = 2 \quad \because \quad 2 \times 2 = 4 and 2>02 > 0 (we take the positive root by convention). ∴  x=2\therefore \; \sqrt{x} = 2.

Code examples

Beginner example (Python)

python
# The ∵ symbol does not appear in Python code.
# In code, you document the same logical chain with comments.
# Example: proving that a number is positive
# because it is the result of squaring another number
def is_positive_squared(x: float) -> bool:
    """Returns True because x**2 is always >= 0 for real x.

    (∵ squaring a real number cannot produce a negative result)
    """
    squared = x ** 2
    # squared >= 0 ∵ x**2 = x * x, and a number times itself is non-negative
    return squared >= 0


print(is_positive_squared(-5))  # True (∵ (-5)^2 = 25 >= 0)
print(is_positive_squared(0))   # True (∵ 0^2 = 0 >= 0)
print(is_positive_squared(3))   # True (∵ 3^2 = 9 >= 0)

Beginner example (R)

r
# In R, the same logical documentation goes into comments.
# Example: proving non-negativity of variance
# Variance is always >= 0
# ∵ Var(X) = E[(X - mu)^2]
# and squared quantities are always non-negative
compute_variance <- function(x) {  # x is a numeric vector
  mu <- mean(x)
  deviations_squared <- (x - mu)^2  # always >= 0 ∵ squaring removes sign
  variance <- mean(deviations_squared)
  variance
}
values <- c(2, 4, 4, 4, 5, 5, 7, 9)
cat("Variance:", compute_variance(values), "\n")  # 4
cat("Variance >= 0:", compute_variance(values) >= 0, "\n")  # TRUE
# TRUE ∵ variance is the mean of squared deviations

Professional example (Python)

python
import numpy as np
from scipy import stats   # Scenario: OLS residual normality check with documented reasoning chain
# Each analytical step is annotated with ∵ (because) in comments
np.random.seed(42)   # Generate data from the true linear model
n_obs = 150
x = np.linspace(0, 10, n_obs)
beta_true = np.array([2.0, 1.5])
sigma_true = 1.0   # y = beta_0 + beta_1 * x + epsilon, where epsilon ~ N(0, sigma^2)
epsilon = np.random.normal(0, sigma_true, size=n_obs)
y = beta_true[0] + beta_true[1] * x + epsilon   # OLS estimates
x_matrix = np.column_stack([np.ones(n_obs), x])
beta_hat = np.linalg.lstsq(x_matrix, y, rcond=None)[0]   # Residuals
y_hat = x_matrix @ beta_hat
residuals = y - y_hat   # Step 1: check mean of residuals
residual_mean = residuals.mean()
# ∵ under correct model specification, E[residuals] = 0 by construction
# (the OLS estimator is designed to minimize sum of squared residuals,
# which forces the residual mean to zero for models with an intercept)
# Step 2: check normality of residuals using Shapiro-Wilk
stat, p_value = stats.shapiro(residuals[:50])
# ∵ Shapiro-Wilk is most reliable for n <= 50
# Step 3: interpret — did residuals come from N(0, sigma^2)?
normality_holds = p_value > 0.05
# ∵ if p > 0.05, we fail to reject H0 that residuals are normal
# ∵ our data-generating process was epsilon ~ N(0, 1), so normality should hold
print("OLS Residual Diagnostics")
print(f" Beta hat: {beta_hat.round(4)}")
print(f" Residual mean: {residual_mean:.6f} (should be ~0 ∵ OLS intercept)")
print(f" Shapiro-Wilk p: {p_value:.4f}")
print(f" Normality holds: {normality_holds} (∵ epsilon was drawn from N(0,1))")

Professional example (R)

r
# OLS residual normality check with documented reasoning (∵ / ∴ in comments)
set.seed(42)
n_obs <- 150
x <- seq(0, 10, length.out = n_obs)
beta_true <- c(2, 1.5)
sigma_true <- 1
epsilon <- rnorm(n_obs, 0, sigma_true)
y <- beta_true[1] + beta_true[2] * x + epsilon
fit <- lm(y ~ x)
beta_hat <- coef(fit)
residuals <- residuals(fit)
residual_mean <- mean(residuals)
sw <- shapiro.test(residuals)
normality_holds <- sw$p.value > 0.05
cat("OLS Residual Diagnostics\n")
cat(" Beta hat: ", round(beta_hat, 4), "\n")
cat(sprintf(" Residual mean: %.6f (should be ~0 ∵ OLS intercept)\n", residual_mean))
cat(sprintf(" Shapiro-Wilk p: %.4f\n", sw$p.value))
cat(" Normality holds:", normality_holds, " (∵ epsilon was drawn from N(0,1))\n")

Source: domain knowledge

#foundations#maths-symbols#logic

Keyboard shortcuts

Single keys, ignored while typing in a field or with Cmd, Ctrl or Alt held.

0
Home
1 2 3 4
Work, Writing, Tools, About
j / k
Next / previous section on this page
n / p
Next / previous project or essay
u
Up one level
l
Deutsch
t
Light or dark theme
?
This list
Esc
Close