Definition CSharpMin_initial_core (ge:genv) (v: val) (args:list val): option CSharpMin_core :=
   match v with
     | Vptr b i =>
          if Int.eq_dec i Int.zero
          then match Genv.find_funct_ptr ge b with
                 | None => None
                 | Some f => Some (CSharpMin_Callstate f args Kstop)
               end
          else None
     | _ => None
    end.(*
Parameter CSharpMin_MainIdent:ident.

Definition CSharpMin_make_initial_core (ge:genv) (v: val) (args:list val): option CSharpMin_core :=
   match Genv.find_symbol ge CSharpMin_MainIdent with
        None => None
      | Some b => match Genv.find_funct_ptr ge b with
                              None => None
                            | Some f => match funsig f with
                                                   {| sig_args := sargs; sig_res := sres |} =>
                                                       match sargs, sres with
                                                          nil, Some Tint => Some (CSharpMin_Callstate f nil Kstop) (*args = nil???*)
                                                       | _ , _ => None
                                                       end
                                                 end
                            end
    end.*)
(*Original Csharpminor_semantics has this for initial states:
      Genv.find_symbol ge p.(prog_main) = Some b ->
      Genv.find_funct_ptr ge b = Some f ->
      funsig f = mksignature nil (Some Tint) ->
      initial_state p (Callstate f nil Kstop m0).
 ie esseantially the same as Cminor*)

Definition CSharpMin_core_sem : CoreSemantics genv CSharpMin_core mem.

(* Specifications: *)
Lemma alloc_variables_forward: forall vars m e e2 m' (M: alloc_variables e m vars e2 m'), mem_forward m m'.
Lemma CSharpMin_forward : forall g c m c' m' (CS: CSharpMin_corestep g c m c' m'), mem_forward m m'.
Lemma CSharpMin_corestep_2_CompCertStep: forall (ge : genv) (q : CSharpMin_core) (m : mem) (q' : CSharpMin_core) (m' : mem) , CSharpMin_corestep ge q m q' m' -> exists t, step ge (ToState q m) t (ToState q' m').
Lemma alloc_variables_forward: forall vars m e e2 m' (M: alloc_variables e m vars e2 m'), mem_forward m m'.
Lemma CSharpMin_forward : forall g c m c' m' (CS: CSharpMin_corestep g c m c' m'), mem_lemmas.mem_forward m m'.