Expanded Definition of Branching

TO: Prof. Ellis
FROM: Sebastian Vela
DATE: 10/28/2021
SUBJECT: Expanded Definition Term: Branching

Introduction

The purpose of this document is to discuss the expanded definition of the term branching. I chose the terms “branch” and “branching” because they are used very commonly in programming. Any code that a programmer writes will include some form of branching to another set of instructions, rather than go through all of the instructions in the program one by one. The branches are conditional: If a user performs an action (let’s call this Action A), the program will jump (or branch) to the action corresponding to Action A. If the user performs a different action (Action B), the program will jump to the branch corresponding to Action B, and so on.

Definitions

Our current version of the word “branch” helms its origins from the Latin word “branca”, or paw, referring to parts of the anatomy that divide from the larger animal, such as the claws of a tiger. This term was later borrowed by the Anglo-French as “branche”, but now more often used to refer to the limbs of a tree. Circa 1250-1300, the word was adopted by the Middle English language as “branche”, “braunche”, and “bronche”, now referring to any parts of something that divides like the branches of a tree. Branching is a very simple concept and can be described to even a child. The University of Utah states that branching is “when an Algorithm makes a choice to do one of two (or more things) this is called branching. The most common programming “statement” used to branch is the IF statement.” [1] Techopedia.com gives a more descriptive and in-depth definition as to what branching is “A branch in a computer program is an instruction that tells a computer to begin executing different instructions rather than simply executing the instructions in order. In high-level languages, these are typically referred to as flow control procedures and are built into the language. In assembly programming, branch instructions are built into a CPU.” [2] Techopedia also states the different statements that are used in order to implement a branch such as IF statements, for loops, while loops and switch statements.

Context

Branching can be used differently depending on the industry for example in business branching is the act of creating a smaller office that is separate from a company’s headquarters. Investopedia description of how a branch office works states “Branch offices are useful in that they allow many of the client-specific administrative considerations to be conducted closest to clients. For example, Starbucks has branch offices to better serve its retail stores’ district managers in a more cost-effective manner. They can also cater to and be more informed about the needs of specific locations, rolling out location-specific items or adjusting staff.” [3] The uses of the term “branch” in programming and its use in business are very different. The meaning is more commonly associated with branches in business, so it would cause confusion for people who are not programmers to hear it used in a different context. Someone who is curious about programming would encounter the term “branch” and “branching” very often, as programs almost always have methods and condition-based actions that are described in the code and related documentation.

Working definition

Based on the definitions of branching and its context related to working in CST I would best summarize a branch as an instruction based on a decision, or a reaction based on a condition where the conditions are a series of tests that a program goes through. Each test looks for some kind of indication, whether it is a keyword, phrase, number, or boolean statement. The reaction, or branch, is the instruction that the program follows when the appropriate conditions are met. If the appropriate conditions are not met, the program goes into a different branch, and follows a different set of instructions until the conditions are finally met.

References

[1]       H. J. de S. Germain, “Branching,” Programming – Branching. [Online]. Available: https://www.cs.utah.edu/~germain/PPS/Topics/branching.html

[2]       Techopedia, “What is a branch? – definition from Techopedia,” Techopedia.com, 21-Sep-2016. [Online]. Available: https://www.techopedia.com/definition/18058/branch.

[3]       W. Kenton, “How branch offices work,” Investopedia, 21-Sep-2021. [Online]. Available: https://www.investopedia.com/terms/b/branch-office.asp.

.

500-Word Summary of “A computer program for simulating time travel and a possible ‘solution’ for the grandfather paradox”

TO:                  Professor Ellis
FROM:            Sebastian Vela
DATE:             October 8, 2021
SUBJECT:       500-Word Summary of “A computer program for simulating time travel and a possible ‘solution’ for the grandfather paradox”

The following is a 500-word summary of a master’s thesis about a program that simulates the grandfather paradox. The paradox explains that if a time traveler had gone back in time to kill his grandfather, then he would not have been born to travel back in time, thus allowing the grandfather to live and for the time traveler to be born. The program written by Doron Friedman uses automated reasoning to “modify” history and explore the consequences and propose possible solutions.

The actions and constraints in the simulation are labeled with the values “True”, “False”, or “Unknown”. For every person in the simulation, these values indicate whether the person is alive or not. The timeline of events can be changed by adding or removing actions in the simulation. A strong change is made when something that happened is changed, rather than adding actions. With each new event, the previous timeline is not erased. Instead, the program knows the consequences of the first timeline, and then sees the consequences of the second timeline.

A few hundred facts and constraints are included, with the paradox “solution” containing 229 facts and 344 constraints. Only 3 actions exist in each simulation: begetting, killing, and traveling in time (which is split into “depart” and “arrive”, with preconditions existing that for A to kill B, both must initially be alive, and B not being alive as the post-condition. The constraints “remains” and “appears” are introduced for continuity-of-existence.

The simulation is taken from the point of view of the time traveler, defined as S, and his actions toward his parent, F. The first action is the that F has a child, S. The system is aware of F needing to exist to beget S. Then, S travels back in time to kill F, creating the paradox and the system reports a logical contradiction. The proposed solution to repair this paradox is that S has a clone S1. They are two separate entities, so the contradiction is resolved, but they retain the same identity. Thus, S goes back in time and creates a clone that kills F. This also reports a contradiction: “The user (clone S1) kills his parent F; this introduces the parent paradox and, indeed, our reasoning engine reports a contradiction: F is supposed to be dead because he was killed, but he is also supposed to be alive to beget S” [1, p. 10].

The solution that follows is not as elegant as the researchers would like. “F gives birth to S and goes back in time. S, right after being born, goes back in time as well, and kills his parent F. Right after killing his parent, though, S (actually the clone, S1) gives birth to him. In this solution, therefore, S is F’s son, F’s father, and F’s killer” [2, p. 12]. A much more simplified solution to the paradox is given by having the system not assume any actions by the time traveler. “F travels to the future, begets S, and travels back just in time to be killed by a clone of S who also went back in time” [3, p. 12].

References

[1]     D. Friedman, “A computer program for simulating time travel and a possible ‘solution’ for the grandfather paradox,” arxiv.org. [Online]. Available: https://arxiv.org/ftp/arxiv/papers/1609/1609.08470.pdf