Fumagalli_Motta_Tarantino_2020.Models.BaseExtended

  1import Fumagalli_Motta_Tarantino_2020.Models.Types as Types
  2import Fumagalli_Motta_Tarantino_2020.Models.Exceptions as Exceptions
  3import Fumagalli_Motta_Tarantino_2020.Models.Base as Base
  4
  5
  6class CournotCompetition(Base.OptimalMergerPolicy):
  7    """
  8    In this model is assumed that the product of the start-up is an imperfect substitute of the existing product of the
  9    incumbent. The competition in the market is like a Cournot Competition.
 10
 11    See section 7 of Fumagalli et al. (2020).
 12    """
 13
 14    def __init__(self, gamma=0.3, *args, **kwargs):
 15        """
 16
 17        Parameters
 18        ----------
 19        gamma:float
 20            Degree of substitutability of the product of the start-up and the existing product of the incumbent
 21            (between 0 and 1).
 22        """
 23        assert 0 < gamma < 1, "Gamma has to be between 0 and 1."
 24        self._gamma = gamma
 25        super(CournotCompetition, self).__init__(*args, **kwargs)
 26        assert (
 27            self.development_costs < self.success_probability / 4
 28        ), "K >= p/4 is not valid"
 29        self._calculate_cournot_payoffs()
 30
 31    def _calculate_cournot_payoffs(self):
 32        self._incumbent_profit_without_innovation = 0.25
 33        self._cs_without_innovation = 0.125
 34        self._incumbent_profit_with_innovation = 1 / (2 + 2 * self.gamma)
 35        self._cs_with_innovation = 1 / (4 + 4 * self.gamma)
 36        self._incumbent_profit_duopoly = 1 / (2 + self.gamma) ** 2
 37        self._startup_profit_duopoly = self._incumbent_profit_duopoly
 38        self._cs_duopoly = (1 + self.gamma) / ((2 + self.gamma) ** 2)
 39
 40    def _check_assumption_one(self):
 41        assert (self.gamma**2) / (
 42            ((2 + self.gamma) ** 2) * (2 + 2 * self.gamma)
 43        ) > 0, "A1 adjusted for the micro foundation model."
 44
 45    def _check_assumption_two(self):
 46        assert (self.gamma * (self.gamma**2 + 3 * self.gamma + 4)) / (
 47            ((2 + self.gamma) ** 2) * (4 + 4 * self.gamma)
 48        ) > 0, "A2 adjusted for the micro foundation model."
 49
 50    def _check_assumption_three(self):
 51        assert (
 52            self._gamma_assumption_three > self.gamma
 53        ), "A3 adjusted for the micro foundation model."
 54
 55    def _check_assumption_four(self):
 56        assert (
 57            self._gamma_assumption_four > self.gamma
 58        ), "A4 adjusted for the micro foundation model."
 59
 60    def _check_assumption_five(self):
 61        assert (
 62            self.success_probability / ((2 + self.gamma) ** 2) - self.development_costs
 63            < self.private_benefit
 64            < self.development_costs
 65        ), "A5 adjusted for the micro foundation model."
 66
 67    @property
 68    def gamma(self) -> float:
 69        """
 70        Degree of substitutability of the product of the start-up and the existing product of the incumbent.
 71        """
 72        return self._gamma
 73
 74    @property
 75    def _gamma_assumption_three(self) -> float:
 76        return ((self.success_probability / self.development_costs) ** (1 / 2)) - 2
 77
 78    @property
 79    def _gamma_assumption_four(self) -> float:
 80        return (3 * self.success_probability - 8 * self.development_costs) / (
 81            8 * self.development_costs + 3 * self.success_probability
 82        )
 83
 84    def is_laissez_faire_optimal(self) -> bool:
 85        """
 86        In this model a laissez-faire merger policy is never optimal.
 87        """
 88        return False
 89
 90    def is_intermediate_optimal(self) -> bool:
 91        """
 92        Returns whether an intermediate merger policy (late takeover allowed) is optimal.
 93
 94        An intermediate merger policy (late takeovers allowed) is optimal, if:
 95        1. The investment is sufficiently large.
 96        2. The degree of substitutability is moderate.
 97        3. Detrimental effect of less intense product market competition is dominated by the benefit of making it more
 98        likely that the innovation is commercialised (Condition 6 not satisfied).
 99
100        Returns
101        -------
102        True
103            If an intermediate merger policy (late takeover allowed) is optimal.
104        """
105        return (
106            self.is_intermediate_policy_feasible()
107            and not self.is_competition_effect_dominating()
108        )
109
110    def is_strict_optimal(self) -> bool:
111        return not self.is_intermediate_optimal()
112
113    def is_intermediate_policy_feasible(self) -> bool:
114        """
115        Returns whether an intermediate (with late takeovers) merger policy is feasible.
116
117        This implies, that the investment costs are sufficiently high and the degree of substitutability is moderate.
118
119        Returns
120        -------
121        True
122            If an intermediate policy is feasible.
123        """
124        return (
125            (
126                -5 * (self.success_probability**3)
127                + 64 * (self.development_costs**3) * (3 + self.success_probability)
128                + 12
129                * self.development_costs
130                * (self.success_probability**2)
131                * (3 * self.success_probability - 1)
132                + 16
133                * (self.development_costs**2)
134                * self.success_probability
135                * (5 + 6 * self.success_probability)
136            )
137            / (
138                8
139                * self.success_probability
140                * ((4 * self.development_costs + 3 * self.success_probability) ** 2)
141            )
142        ) > 0
143
144
145class PerfectInformation(Base.OptimalMergerPolicy):
146    """
147    Assume the incumbent knows the realisation of the start-up’s resources when it bids at t = 1(a) and the AA also
148    knows it when it reviews the merger proposal. We maintain the assumption that, when it establishes the standard for
149    merger policy at t = 0, the AA only knows the distribution of A
150
151    See section 8.5 of Fumagalli et al. (2020).
152    """
153
154    def _check_merger_policy(self):
155        super(PerfectInformation, self)._check_merger_policy()
156        if (
157            self.merger_policy
158            is Types.MergerPolicies.Intermediate_late_takeover_prohibited
159        ):
160            raise Exceptions.MergerPolicyNotAvailable(
161                "This merger policy is not available in this model"
162            )
163
164    def _solve_game_strict_merger_policy(self) -> None:
165        assert self.merger_policy is Types.MergerPolicies.Strict
166        if (
167            self.is_startup_credit_rationed
168            and not self.is_incumbent_expected_to_shelve()
169        ):
170            self._set_takeovers(early_takeover=Types.Takeover.Separating)
171        else:
172            self._set_takeovers(
173                early_takeover=Types.Takeover.No, late_takeover=Types.Takeover.No
174            )
175
176    def _solve_game_laissez_faire(self) -> None:
177        assert self.merger_policy is Types.MergerPolicies.Laissez_faire
178        if self.is_startup_credit_rationed and self.is_incumbent_expected_to_shelve():
179            self._set_takeovers(
180                early_takeover=Types.Takeover.No, late_takeover=Types.Takeover.No
181            )
182        else:
183            if self.is_startup_credit_rationed:
184                self._set_takeovers(early_takeover=Types.Takeover.Separating)
185            else:
186                self._set_takeovers(early_takeover=Types.Takeover.Pooling)
187
188    def _solve_game_late_takeover_allowed(self) -> None:
189        assert (
190            self.merger_policy
191            is Types.MergerPolicies.Intermediate_late_takeover_allowed
192        )
193        if self.is_incumbent_expected_to_shelve():
194            if self.is_startup_credit_rationed or not self.development_success:
195                self._set_takeovers(
196                    early_takeover=Types.Takeover.No, late_takeover=Types.Takeover.No
197                )
198            else:
199                self._set_takeovers(late_takeover=Types.Takeover.Pooling)
200        else:
201            if self.is_startup_credit_rationed:
202                self._set_takeovers(early_takeover=Types.Takeover.Separating)
203            else:
204                self._set_takeovers(early_takeover=Types.Takeover.Pooling)
205
206    def is_laissez_faire_optimal(self) -> bool:
207        """
208        In this model a laissez-faire merger policy is never optimal.
209        """
210        return False
211
212    def is_intermediate_optimal(self) -> bool:
213        """
214        Returns whether an intermediate merger policy (late takeover allowed) is optimal.
215
216        An intermediate merger policy (late takeovers allowed) is optimal, if:
217        1. Incumbent is expected to shelve ($p(\\pi^M_I-\\pi^m_I) < K$).
218        2. The intermediate policy is feasible.
219        3. Detrimental effect of less intense product market competition is dominated by the benefit of making it more
220        likely that the innovation is commercialised (Condition 6 not satisfied).
221
222        Returns
223        -------
224        True
225            If an intermediate merger policy (late takeover allowed) is optimal.
226        """
227        return (
228            self.is_incumbent_expected_to_shelve()
229            and not self.is_competition_effect_dominating()
230            and self.is_intermediate_policy_feasible()
231        )
232
233    def is_intermediate_policy_feasible(self) -> bool:
234        return (
235            self.success_probability
236            * (self.w_with_innovation - self.w_without_innovation)
237            - self.development_costs
238            >= self.w_duopoly - self.w_with_innovation
239        )
240
241
242class EquityContract(Base.OptimalMergerPolicy):
243    """
244    Aan equity contract gives rise to different results in the financial contracting game. With equity, when the
245    incumbent acquires the start-up in $t = 2$, it pays the investors and the entrepreneur. Going backwards, the
246    investors do not expect an increase in the pledgeable income, and there is no relaxation of financial constraints,
247    as much as under the strict merger policy. It follows that under the laissez-faire or the intermediate policy the
248    start-up will prefer debt to equity.
249
250    See section 8.4 of Fumagalli et al. (2020).
251    """
252
253    @property
254    def asset_threshold_late_takeover(self) -> float:
255        return self.asset_threshold
256
257    def does_startup_prefer_debt(self) -> bool:
258        """
259        Returns whether the start-up prefers debt or equity.
260
261        The start-up prefers debt to equity, if late takeovers are allowed.
262
263        Returns
264        -------
265        True
266            If the start-up prefers debt to equity.
267        """
268        if self.merger_policy in [
269            Types.MergerPolicies.Intermediate_late_takeover_allowed,
270            Types.MergerPolicies.Laissez_faire,
271        ]:
272            return True
273        return False
274
275    def is_intermediate_optimal(self) -> bool:
276        """
277        In this model an intermediate merger policy is never optimal.
278        """
279        return False
280
281    def is_laissez_faire_optimal(self) -> bool:
282        """
283        In this model a laissez-faire merger policy is never optimal.
284        """
285        return False
  7class CournotCompetition(Base.OptimalMergerPolicy):
  8    """
  9    In this model is assumed that the product of the start-up is an imperfect substitute of the existing product of the
 10    incumbent. The competition in the market is like a Cournot Competition.
 11
 12    See section 7 of Fumagalli et al. (2020).
 13    """
 14
 15    def __init__(self, gamma=0.3, *args, **kwargs):
 16        """
 17
 18        Parameters
 19        ----------
 20        gamma:float
 21            Degree of substitutability of the product of the start-up and the existing product of the incumbent
 22            (between 0 and 1).
 23        """
 24        assert 0 < gamma < 1, "Gamma has to be between 0 and 1."
 25        self._gamma = gamma
 26        super(CournotCompetition, self).__init__(*args, **kwargs)
 27        assert (
 28            self.development_costs < self.success_probability / 4
 29        ), "K >= p/4 is not valid"
 30        self._calculate_cournot_payoffs()
 31
 32    def _calculate_cournot_payoffs(self):
 33        self._incumbent_profit_without_innovation = 0.25
 34        self._cs_without_innovation = 0.125
 35        self._incumbent_profit_with_innovation = 1 / (2 + 2 * self.gamma)
 36        self._cs_with_innovation = 1 / (4 + 4 * self.gamma)
 37        self._incumbent_profit_duopoly = 1 / (2 + self.gamma) ** 2
 38        self._startup_profit_duopoly = self._incumbent_profit_duopoly
 39        self._cs_duopoly = (1 + self.gamma) / ((2 + self.gamma) ** 2)
 40
 41    def _check_assumption_one(self):
 42        assert (self.gamma**2) / (
 43            ((2 + self.gamma) ** 2) * (2 + 2 * self.gamma)
 44        ) > 0, "A1 adjusted for the micro foundation model."
 45
 46    def _check_assumption_two(self):
 47        assert (self.gamma * (self.gamma**2 + 3 * self.gamma + 4)) / (
 48            ((2 + self.gamma) ** 2) * (4 + 4 * self.gamma)
 49        ) > 0, "A2 adjusted for the micro foundation model."
 50
 51    def _check_assumption_three(self):
 52        assert (
 53            self._gamma_assumption_three > self.gamma
 54        ), "A3 adjusted for the micro foundation model."
 55
 56    def _check_assumption_four(self):
 57        assert (
 58            self._gamma_assumption_four > self.gamma
 59        ), "A4 adjusted for the micro foundation model."
 60
 61    def _check_assumption_five(self):
 62        assert (
 63            self.success_probability / ((2 + self.gamma) ** 2) - self.development_costs
 64            < self.private_benefit
 65            < self.development_costs
 66        ), "A5 adjusted for the micro foundation model."
 67
 68    @property
 69    def gamma(self) -> float:
 70        """
 71        Degree of substitutability of the product of the start-up and the existing product of the incumbent.
 72        """
 73        return self._gamma
 74
 75    @property
 76    def _gamma_assumption_three(self) -> float:
 77        return ((self.success_probability / self.development_costs) ** (1 / 2)) - 2
 78
 79    @property
 80    def _gamma_assumption_four(self) -> float:
 81        return (3 * self.success_probability - 8 * self.development_costs) / (
 82            8 * self.development_costs + 3 * self.success_probability
 83        )
 84
 85    def is_laissez_faire_optimal(self) -> bool:
 86        """
 87        In this model a laissez-faire merger policy is never optimal.
 88        """
 89        return False
 90
 91    def is_intermediate_optimal(self) -> bool:
 92        """
 93        Returns whether an intermediate merger policy (late takeover allowed) is optimal.
 94
 95        An intermediate merger policy (late takeovers allowed) is optimal, if:
 96        1. The investment is sufficiently large.
 97        2. The degree of substitutability is moderate.
 98        3. Detrimental effect of less intense product market competition is dominated by the benefit of making it more
 99        likely that the innovation is commercialised (Condition 6 not satisfied).
100
101        Returns
102        -------
103        True
104            If an intermediate merger policy (late takeover allowed) is optimal.
105        """
106        return (
107            self.is_intermediate_policy_feasible()
108            and not self.is_competition_effect_dominating()
109        )
110
111    def is_strict_optimal(self) -> bool:
112        return not self.is_intermediate_optimal()
113
114    def is_intermediate_policy_feasible(self) -> bool:
115        """
116        Returns whether an intermediate (with late takeovers) merger policy is feasible.
117
118        This implies, that the investment costs are sufficiently high and the degree of substitutability is moderate.
119
120        Returns
121        -------
122        True
123            If an intermediate policy is feasible.
124        """
125        return (
126            (
127                -5 * (self.success_probability**3)
128                + 64 * (self.development_costs**3) * (3 + self.success_probability)
129                + 12
130                * self.development_costs
131                * (self.success_probability**2)
132                * (3 * self.success_probability - 1)
133                + 16
134                * (self.development_costs**2)
135                * self.success_probability
136                * (5 + 6 * self.success_probability)
137            )
138            / (
139                8
140                * self.success_probability
141                * ((4 * self.development_costs + 3 * self.success_probability) ** 2)
142            )
143        ) > 0

In this model is assumed that the product of the start-up is an imperfect substitute of the existing product of the incumbent. The competition in the market is like a Cournot Competition.

See section 7 of Fumagalli et al. (2020).

CournotCompetition(gamma=0.3, *args, **kwargs)
15    def __init__(self, gamma=0.3, *args, **kwargs):
16        """
17
18        Parameters
19        ----------
20        gamma:float
21            Degree of substitutability of the product of the start-up and the existing product of the incumbent
22            (between 0 and 1).
23        """
24        assert 0 < gamma < 1, "Gamma has to be between 0 and 1."
25        self._gamma = gamma
26        super(CournotCompetition, self).__init__(*args, **kwargs)
27        assert (
28            self.development_costs < self.success_probability / 4
29        ), "K >= p/4 is not valid"
30        self._calculate_cournot_payoffs()
Parameters
  • gamma (float): Degree of substitutability of the product of the start-up and the existing product of the incumbent (between 0 and 1).
gamma: float
68    @property
69    def gamma(self) -> float:
70        """
71        Degree of substitutability of the product of the start-up and the existing product of the incumbent.
72        """
73        return self._gamma

Degree of substitutability of the product of the start-up and the existing product of the incumbent.

def is_laissez_faire_optimal(self) -> bool:
85    def is_laissez_faire_optimal(self) -> bool:
86        """
87        In this model a laissez-faire merger policy is never optimal.
88        """
89        return False

In this model a laissez-faire merger policy is never optimal.

def is_intermediate_optimal(self) -> bool:
 91    def is_intermediate_optimal(self) -> bool:
 92        """
 93        Returns whether an intermediate merger policy (late takeover allowed) is optimal.
 94
 95        An intermediate merger policy (late takeovers allowed) is optimal, if:
 96        1. The investment is sufficiently large.
 97        2. The degree of substitutability is moderate.
 98        3. Detrimental effect of less intense product market competition is dominated by the benefit of making it more
 99        likely that the innovation is commercialised (Condition 6 not satisfied).
100
101        Returns
102        -------
103        True
104            If an intermediate merger policy (late takeover allowed) is optimal.
105        """
106        return (
107            self.is_intermediate_policy_feasible()
108            and not self.is_competition_effect_dominating()
109        )

Returns whether an intermediate merger policy (late takeover allowed) is optimal.

An intermediate merger policy (late takeovers allowed) is optimal, if:

  1. The investment is sufficiently large.
  2. The degree of substitutability is moderate.
  3. Detrimental effect of less intense product market competition is dominated by the benefit of making it more likely that the innovation is commercialised (Condition 6 not satisfied).
Returns
  • True: If an intermediate merger policy (late takeover allowed) is optimal.
def is_strict_optimal(self) -> bool:
111    def is_strict_optimal(self) -> bool:
112        return not self.is_intermediate_optimal()

Returns whether the strict merger policy is optimal.

The strict merger is optimal, if the other policies are not optimal.

Returns
  • True: If the strict merger policy is optimal.
def is_intermediate_policy_feasible(self) -> bool:
114    def is_intermediate_policy_feasible(self) -> bool:
115        """
116        Returns whether an intermediate (with late takeovers) merger policy is feasible.
117
118        This implies, that the investment costs are sufficiently high and the degree of substitutability is moderate.
119
120        Returns
121        -------
122        True
123            If an intermediate policy is feasible.
124        """
125        return (
126            (
127                -5 * (self.success_probability**3)
128                + 64 * (self.development_costs**3) * (3 + self.success_probability)
129                + 12
130                * self.development_costs
131                * (self.success_probability**2)
132                * (3 * self.success_probability - 1)
133                + 16
134                * (self.development_costs**2)
135                * self.success_probability
136                * (5 + 6 * self.success_probability)
137            )
138            / (
139                8
140                * self.success_probability
141                * ((4 * self.development_costs + 3 * self.success_probability) ** 2)
142            )
143        ) > 0

Returns whether an intermediate (with late takeovers) merger policy is feasible.

This implies, that the investment costs are sufficiently high and the degree of substitutability is moderate.

Returns
  • True: If an intermediate policy is feasible.
146class PerfectInformation(Base.OptimalMergerPolicy):
147    """
148    Assume the incumbent knows the realisation of the start-up’s resources when it bids at t = 1(a) and the AA also
149    knows it when it reviews the merger proposal. We maintain the assumption that, when it establishes the standard for
150    merger policy at t = 0, the AA only knows the distribution of A
151
152    See section 8.5 of Fumagalli et al. (2020).
153    """
154
155    def _check_merger_policy(self):
156        super(PerfectInformation, self)._check_merger_policy()
157        if (
158            self.merger_policy
159            is Types.MergerPolicies.Intermediate_late_takeover_prohibited
160        ):
161            raise Exceptions.MergerPolicyNotAvailable(
162                "This merger policy is not available in this model"
163            )
164
165    def _solve_game_strict_merger_policy(self) -> None:
166        assert self.merger_policy is Types.MergerPolicies.Strict
167        if (
168            self.is_startup_credit_rationed
169            and not self.is_incumbent_expected_to_shelve()
170        ):
171            self._set_takeovers(early_takeover=Types.Takeover.Separating)
172        else:
173            self._set_takeovers(
174                early_takeover=Types.Takeover.No, late_takeover=Types.Takeover.No
175            )
176
177    def _solve_game_laissez_faire(self) -> None:
178        assert self.merger_policy is Types.MergerPolicies.Laissez_faire
179        if self.is_startup_credit_rationed and self.is_incumbent_expected_to_shelve():
180            self._set_takeovers(
181                early_takeover=Types.Takeover.No, late_takeover=Types.Takeover.No
182            )
183        else:
184            if self.is_startup_credit_rationed:
185                self._set_takeovers(early_takeover=Types.Takeover.Separating)
186            else:
187                self._set_takeovers(early_takeover=Types.Takeover.Pooling)
188
189    def _solve_game_late_takeover_allowed(self) -> None:
190        assert (
191            self.merger_policy
192            is Types.MergerPolicies.Intermediate_late_takeover_allowed
193        )
194        if self.is_incumbent_expected_to_shelve():
195            if self.is_startup_credit_rationed or not self.development_success:
196                self._set_takeovers(
197                    early_takeover=Types.Takeover.No, late_takeover=Types.Takeover.No
198                )
199            else:
200                self._set_takeovers(late_takeover=Types.Takeover.Pooling)
201        else:
202            if self.is_startup_credit_rationed:
203                self._set_takeovers(early_takeover=Types.Takeover.Separating)
204            else:
205                self._set_takeovers(early_takeover=Types.Takeover.Pooling)
206
207    def is_laissez_faire_optimal(self) -> bool:
208        """
209        In this model a laissez-faire merger policy is never optimal.
210        """
211        return False
212
213    def is_intermediate_optimal(self) -> bool:
214        """
215        Returns whether an intermediate merger policy (late takeover allowed) is optimal.
216
217        An intermediate merger policy (late takeovers allowed) is optimal, if:
218        1. Incumbent is expected to shelve ($p(\\pi^M_I-\\pi^m_I) < K$).
219        2. The intermediate policy is feasible.
220        3. Detrimental effect of less intense product market competition is dominated by the benefit of making it more
221        likely that the innovation is commercialised (Condition 6 not satisfied).
222
223        Returns
224        -------
225        True
226            If an intermediate merger policy (late takeover allowed) is optimal.
227        """
228        return (
229            self.is_incumbent_expected_to_shelve()
230            and not self.is_competition_effect_dominating()
231            and self.is_intermediate_policy_feasible()
232        )
233
234    def is_intermediate_policy_feasible(self) -> bool:
235        return (
236            self.success_probability
237            * (self.w_with_innovation - self.w_without_innovation)
238            - self.development_costs
239            >= self.w_duopoly - self.w_with_innovation
240        )

Assume the incumbent knows the realisation of the start-up’s resources when it bids at t = 1(a) and the AA also knows it when it reviews the merger proposal. We maintain the assumption that, when it establishes the standard for merger policy at t = 0, the AA only knows the distribution of A

See section 8.5 of Fumagalli et al. (2020).

def is_laissez_faire_optimal(self) -> bool:
207    def is_laissez_faire_optimal(self) -> bool:
208        """
209        In this model a laissez-faire merger policy is never optimal.
210        """
211        return False

In this model a laissez-faire merger policy is never optimal.

def is_intermediate_optimal(self) -> bool:
213    def is_intermediate_optimal(self) -> bool:
214        """
215        Returns whether an intermediate merger policy (late takeover allowed) is optimal.
216
217        An intermediate merger policy (late takeovers allowed) is optimal, if:
218        1. Incumbent is expected to shelve ($p(\\pi^M_I-\\pi^m_I) < K$).
219        2. The intermediate policy is feasible.
220        3. Detrimental effect of less intense product market competition is dominated by the benefit of making it more
221        likely that the innovation is commercialised (Condition 6 not satisfied).
222
223        Returns
224        -------
225        True
226            If an intermediate merger policy (late takeover allowed) is optimal.
227        """
228        return (
229            self.is_incumbent_expected_to_shelve()
230            and not self.is_competition_effect_dominating()
231            and self.is_intermediate_policy_feasible()
232        )

Returns whether an intermediate merger policy (late takeover allowed) is optimal.

An intermediate merger policy (late takeovers allowed) is optimal, if:

  1. Incumbent is expected to shelve ($p(\pi^M_I-\pi^m_I) < K$).
  2. The intermediate policy is feasible.
  3. Detrimental effect of less intense product market competition is dominated by the benefit of making it more likely that the innovation is commercialised (Condition 6 not satisfied).
Returns
  • True: If an intermediate merger policy (late takeover allowed) is optimal.
def is_intermediate_policy_feasible(self) -> bool:
234    def is_intermediate_policy_feasible(self) -> bool:
235        return (
236            self.success_probability
237            * (self.w_with_innovation - self.w_without_innovation)
238            - self.development_costs
239            >= self.w_duopoly - self.w_with_innovation
240        )

Returns whether an intermediate (with late takeovers) merger policy is feasible.

An intermediate policy, which authorizes late takeovers, is feasible if condition 5 is not satisfied.

Returns
  • True: If an intermediate policy is feasible.
243class EquityContract(Base.OptimalMergerPolicy):
244    """
245    Aan equity contract gives rise to different results in the financial contracting game. With equity, when the
246    incumbent acquires the start-up in $t = 2$, it pays the investors and the entrepreneur. Going backwards, the
247    investors do not expect an increase in the pledgeable income, and there is no relaxation of financial constraints,
248    as much as under the strict merger policy. It follows that under the laissez-faire or the intermediate policy the
249    start-up will prefer debt to equity.
250
251    See section 8.4 of Fumagalli et al. (2020).
252    """
253
254    @property
255    def asset_threshold_late_takeover(self) -> float:
256        return self.asset_threshold
257
258    def does_startup_prefer_debt(self) -> bool:
259        """
260        Returns whether the start-up prefers debt or equity.
261
262        The start-up prefers debt to equity, if late takeovers are allowed.
263
264        Returns
265        -------
266        True
267            If the start-up prefers debt to equity.
268        """
269        if self.merger_policy in [
270            Types.MergerPolicies.Intermediate_late_takeover_allowed,
271            Types.MergerPolicies.Laissez_faire,
272        ]:
273            return True
274        return False
275
276    def is_intermediate_optimal(self) -> bool:
277        """
278        In this model an intermediate merger policy is never optimal.
279        """
280        return False
281
282    def is_laissez_faire_optimal(self) -> bool:
283        """
284        In this model a laissez-faire merger policy is never optimal.
285        """
286        return False

Aan equity contract gives rise to different results in the financial contracting game. With equity, when the incumbent acquires the start-up in $t = 2$, it pays the investors and the entrepreneur. Going backwards, the investors do not expect an increase in the pledgeable income, and there is no relaxation of financial constraints, as much as under the strict merger policy. It follows that under the laissez-faire or the intermediate policy the start-up will prefer debt to equity.

See section 8.4 of Fumagalli et al. (2020).

asset_threshold_late_takeover: float
254    @property
255    def asset_threshold_late_takeover(self) -> float:
256        return self.asset_threshold

The prospect that the start-up will be acquired at $t = 2$ alleviates financial constraints: there exists a threshold level $\bar{A}^T = B - (\pi_I^M - K)$

def does_startup_prefer_debt(self) -> bool:
258    def does_startup_prefer_debt(self) -> bool:
259        """
260        Returns whether the start-up prefers debt or equity.
261
262        The start-up prefers debt to equity, if late takeovers are allowed.
263
264        Returns
265        -------
266        True
267            If the start-up prefers debt to equity.
268        """
269        if self.merger_policy in [
270            Types.MergerPolicies.Intermediate_late_takeover_allowed,
271            Types.MergerPolicies.Laissez_faire,
272        ]:
273            return True
274        return False

Returns whether the start-up prefers debt or equity.

The start-up prefers debt to equity, if late takeovers are allowed.

Returns
  • True: If the start-up prefers debt to equity.
def is_intermediate_optimal(self) -> bool:
276    def is_intermediate_optimal(self) -> bool:
277        """
278        In this model an intermediate merger policy is never optimal.
279        """
280        return False

In this model an intermediate merger policy is never optimal.

def is_laissez_faire_optimal(self) -> bool:
282    def is_laissez_faire_optimal(self) -> bool:
283        """
284        In this model a laissez-faire merger policy is never optimal.
285        """
286        return False

In this model a laissez-faire merger policy is never optimal.