It is an illusion that the computation rules "define" or "construct" the objects they speak about. You correctly observed that the equation for ind=A does not "define" it, but failed to observe that the same is true in other cases as well. Let us consider the induction principle for the unit type 1, which seems particularly obviously "determined". According to Section 1.5 of the HoTT book we have
ind1:∏C:1→TypeC(⋆)→∏x:1P(x)
with the equation
ind1(C,c,⋆)=c.
Does this "define" or "construct"
ind1 in the sense that it leaves no doubt as to what
ind1 "does"? For instance, set
C(x)=N and
a=42, and consider what we could say about
ind1(C,42,e)
for a given expression
e of type
1. Your first thought might be that we can reduce this to
42 because "
⋆ is the only element of
1". But to be quite precise, the equation for
ind1 is applicable only if we show
e≡⋆, which is impossible when
e is a variable, for example. We can try to wiggle out of this and say that we are only interested in computation with closed terms, so
e should be closed.
Is it not the case that every closed term e of type 1 is judgmentally equal to ⋆? That depends on nasty details and complicated proofs of normalization, actually. In the case of HoTT the answer is "no" because e could contain instances of the Univalence Axiom, and it is not clear what do to about that (this is the open problem in HoTT).
We can circumvent the trouble with univalance by considering a version of type theory which does have good properties so that every closed term of type 1 is judgmentally equal to ⋆. In that case it is fair to say that we do know how to compute with ind1, but:
The same will hold for the identity type, because every closed term of an identity type will be judgmentally equal to some refl(a), and so then the equation for ind=A will tell us how to compute.
Just because we know how to compute with closed terms of a type, that does not mean we have actually defined anything because there is more to a type than its closed terms, as I tried to explain once.
For example, Martin-Löf type theory (without the identity types) can be interpreted domain-theoretically in such a way that 1 contains two elements ⊥ and ⊤, where ⊤ corresponds to ⋆ and ⊥ to non-termination. Alas, since there is no way to write down a non-terminating expression in type theory, ⊥ cannot be named. Consequently, the equation for ind1 does not tell us how to compute on ⊥ (the two obvious choices being "eagerly" and "lazily").
In software engineering terms, I would say we have a confusion between specification and implementation. The HoTT axioms for the identity types are a specification. The equation ind=C(C,c,x,x,refl(x))≡c(x) is not telling us how to compute with, or how to construct ind=C, but rather that however ind=C is "implemented", we require that it satisfy the equation. It is a separate question whether such ind=C can be obtained in a constructive fashion.
Lastly, I am a bit weary of how you use the word "constructive". It looks as if you think that "constructive" is the same as "defined". Under that interpretation the Halting oracle is constructive, because its behavior is defined by the requirement we impose on it (namely that it output 1 or 0 according to whether the given machine halts). It is prefectly possible to describe objects which only exist in a non-constructive setting. Conversely, it is perfectly possible to speak constructively about properties and other things that cannot actually be computed. Here is one: the relation H⊆N×{0,1} defined by
H(n,d)⟺(d=1⇒n-th machine halts)∧(d=0⇒n-th machine diverges)
is constructive, i.e., there is nothing wrong with this definition from a constructive point of view. It just so happens that constructively one cannot show that
H is a total relation, and its characteristic map
χH:N×{0,1}→Prop does not factor through
bool, so we cannot "compute" its values.
Addendum: The title of your question is "Is path induction constructive?" After having cleared up the difference between "constructive" and "defined", we can answer the question. Yes, path induction is known to be constructive in certain cases:
If we restrict to type theory without Univalence so that we can show strong normalization, then path induction and everything else is constructive because there are algorithms that perform the normalization procedure.
There are realizability models of type theory, which explain how every closed term in type theory corresponds to a Turing machine. However, these models satisfy Streicher's Axiom K, which rules out Univalence.
There is a translation of type theory (again without Univalence) into constructive set theory CZF. Once again, this validates Streicher's axiom K.
There is a groupoid model inside realizability models which allows us to interpret type theory without Streicher's K. This is preliminary work by Steve Awodey and myself.
We really need to sort out the constructive status of Univalence.